python生成器重复项


问题内容

如何避免将重复的条目添加到生成器中,或者一旦它们已经存在就将其删除?

如果我应该使用其他东西,请提出建议。


问题答案:

如果值是可哈希值,则删除重复项的最简单,最愚蠢的方法是使用set

values = mygenerator()
unique_values = set(values)

但是要当心:集不记得值的原始顺序。因此,这扰乱了序列。

下面的功能可能比set您的目的更好。它过滤掉重复项,而不会使其他任何值混乱:

def nub(it):
    seen = set()
    for x in it:
        if x not in seen:
            yield x
            seen.add(x)

调用nub一个说法,可迭代的可哈希值。它返回一个迭代器,该迭代器生成所有相同的项目,但删除了重复项。