filter 后面过滤的内容,求解

我知道这过滤的内容的重复字母,我知道用的是filter这个过滤函数,但是我看不懂这个函数是怎么定义的,尤其是i后面的感叹号是什么?set(i)是什么?lambda是什么?我怎么去学习它们,有相关的内置查询字典吗?

python
a = ['abdc','sss','ww','dlkf','adf','eef']
b = list(filter(lambda i:len(set(i)) >= len(list(i)),a))       # 过滤不符合条件的元素,返回值为符合条件的元素
print(b)

运行结果: ['abdc', 'dlkf', 'adf']

filter(函数,序列),只过滤掉序列中每一个元素经函数处理后为False的元素
本题函数为匿名函数 lambda ,i是它的参数,也就是序列a中的每个元素
set(i)就是将元素转成集合,说白了就是去掉重复,
len(set(i))>=len(list(i)) 意思是将a中的元素去掉重复后的长度与原长度比较,>=后面的肯定是没有重复的,有重复的结果肯定是False,所以最后把有重复字母的都过滤了。
根据上面的意思,可以简化一下:
b = list(filter(lambda i:len(set(i)) == len(i),a))

听懂了,len(set(i)) >= len(list(i)产生true or false 返回给lamba i.然后用filter去淘汰掉false.最后得到没有重复字母的元素。