Python生成器中的重复项

9 投票
2 回答
4500 浏览
提问于 2025-04-16 07:21

我该如何避免在生成器中添加重复的条目,或者如果已经有了重复的条目,该如何把它们去掉呢?

如果我应该使用其他方法,请给我建议。

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,这个参数可以是任何可迭代的哈希值集合。它会返回一个迭代器,输出所有相同的项目,但重复的会被去掉。

撰写回答