谁能解释一下函数dedupe每一行都做什么用的?

def dedupe(items):
    seen=set()
    for item in items:
        if item not in seen:
            yield item
            seen.add(item)
            
if __name__=='__main__':
    a=[5,5,2,1,9,1,5,10]
    print(a)
    print(list(dedupe(a))) 

整段代码作用是对列表去重。

def dedupe(items):#定义一个函数,参数为列表
    seen=set()#定义一个空集合
    for item in items:#遍历列表 
        if item not in seen:#如果列表中元素不在集合中
            yield item#返回元素结果
            seen.add(item)#上次迭代后执行将元素添加进集合
            
if __name__=='__main__':
    a=[5,5,2,1,9,1,5,10]#给定一个列表
    print(a)#打印列表
    print(list(dedupe(a)))#调用生成器输出结果 


可以把第五行和第六行代码换一下,影响不大。

def dedupe(items):
    seen=set()
    for item in items:
        if item not in seen:
            seen.add(item)#和if item not in seen:配合可以避免同一元素多次被yield item返回。所以把seen定义为list()和把add(item)换成append(item)结果不会变,不知道这里为什么要用让人浮想联翩的set()。
            yield item
            
if __name__=='__main__':
    a=[5,5,2,1,9,1,5,10]
    print(a)
    print(list(dedupe(a)))