Python 从列表中生成唯一值

Python 从列表中生成唯一值,python,duplicates,yield,Python,Duplicates,Yield,我需要生成唯一的元素,例如,如果我有列表[3,4,5,7,3,9,0,3],我只会生成3,4,5,7,9,0 def unique(sequence): for i in sequence: yield (i) return sequence 我不会反复尝试以下方法: list(set(sequence)) 这不会进行任何迭代您可以使用集合跟踪您已生成的项目,从而保持项目的顺序,如下所示: def unique(sequence): yielded

我需要生成唯一的元素,例如,如果我有列表[3,4,5,7,3,9,0,3],我只会生成3,4,5,7,9,0

def unique(sequence):
    for i in sequence:
        yield (i) 
    return sequence
我不会反复尝试以下方法:

list(set(sequence))

这不会进行任何迭代

您可以使用
集合
跟踪您已生成的项目,从而保持项目的顺序,如下所示:

def unique(sequence):
    yielded = set()
    for i in sequence:
        if i in yielded:
            continue
        yield (i)
        yielded.add(i)
给定输入的样本输出:

>>> for x in unique([3,4,5,7,3,9,0,3]):
    print(x)


3
4
5
7
9
0
>>> 

for i in set(sequence)
它改变了其余元素的顺序。是的,它改变了元素的顺序,顺序对
set
s无关紧要。我不明白为什么在生成所有要学究的项目后返回序列,它不会生成元素,因为它构建了一个列表。如何确保我以相同的顺序获取它们?@Wabs Josh:你可能会从更多的itertools导入unique\u everseen…就像这样:从更多的itertools导入unique\u everseen,如果这不起作用,你实际上可以执行pip安装更多的itertools,然后不再使用一套你可以做的返回列表(unique_everseen(sequence))==>[3,4,5,7,9,0]`谢谢大家提供的最好的输入,我已经用它完成了。很高兴能帮助你,如果它回答了你的问题,请将它标记为答案。