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)))