Python生成器中的重复项
我该如何避免在生成器中添加重复的条目,或者如果已经有了重复的条目,该如何把它们去掉呢?
如果我应该使用其他方法,请给我建议。
2 个回答
2
itertools.groupby()
这个函数可以把相邻的重复项合并起来,不过你需要做一些额外的工作。
print [x[0] for x in itertools.groupby([1, 2, 2, 3])]
13
如果这些值是可以哈希的,最简单、最傻的方法去除重复项就是用一个 set
:
values = mygenerator()
unique_values = set(values)
不过要注意:集合(set)不记得这些值最初的顺序,所以它会把顺序打乱。
下面这个函数可能比 set
更适合你的需求。它可以去掉重复项,同时保持其他值的顺序不变:
def nub(it):
seen = set()
for x in it:
if x not in seen:
yield x
seen.add(x)
用一个参数调用 nub
,这个参数可以是任何可迭代的哈希值集合。它会返回一个迭代器,输出所有相同的项目,但重复的会被去掉。