python生成器重复

时间:2010-11-19 22:47:49

标签: python

如何避免将重复的条目添加到生成器中,或者在已经存在的情况下将其删除?

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

2 个答案:

答案 0 :(得分:11)

如果值是可清除的,删除重复项的最简单,最愚蠢的方法是使用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,任何可迭代值的迭代。它返回一个迭代器,它生成所有相同的项目,但删除了重复项。

答案 1 :(得分:3)

如果您愿意做一些工作,

itertools.groupby()可能会崩溃相邻的重复项。

print [x[0] for x in itertools.groupby([1, 2, 2, 3])]