构建一个从集合中返回唯一值的生成器是否可能且明智

cam*_*mil 1 python generator python-2.7

目前我正在这样做:

# duplicates is a list
uniques = list(set(duplicates))
Run Code Online (Sandbox Code Playgroud)

然而,独特性往往是短暂的。构建一个唯一的生成器会更好吗?如果是这样,我该怎么做?

Fre*_*Foo 5

如果您不需要列表,只需使用set(duplicates)即可。这大约使您的内存使用量减少一半。集合是可迭代的。

或者,您可以定义一个生成器:

def uniques(it):
    seen = set()
    for x in it:
        if x not in seen:
            yield x
            seen.add(x)
Run Code Online (Sandbox Code Playgroud)

但我的预感是,这比一次性构建一套要慢得多。无论如何,内存消耗大致相同。