Python生成器函数在消除重复项的同时循环遍历可迭代序列

问题描述 投票:0回答:2

我正在尝试创建一个生成器函数,该函数在消除重复项的同时循环遍历可迭代的序列,然后一次按顺序返回每个结果(而不是集合或列表),但是我很难使它起作用。我在这里发现了类似的问题,但是响应非常一致,导致生成了一个列表。

我希望输出为:

>>> next(i)
2
>>> next(i)
8
>>> next(i)
4....

我能够将其写为产生列表的常规函数​​:

def unique(series):
    new_series = []
    for i in series:
        if i not in new_series:
            new_series.append(i)
    return new_series

series = ([2,8,4,5,5,6,6,6,2,1])
print(unique(series))

然后,我尝试通过消除创建空白列表并追加到该列表的行,然后使用“ yield”而不是“ return”来将其重写为生成器函数;但我无法正常工作:

def unique(series):
    for i in series:
        if i not in new_series:
            yield new_series

我不知道我是要丢东西还是放太多东西。谢谢您的帮助。

python generator
2个回答
0
投票

简单地说,您需要一些东西来“记住”找到的值。在第一个函数中,您使用的是新列表本身,但是在第二个函数中,您没有它,因此失败。您可以为此使用set()


0
投票

尝试一下:

© www.soinside.com 2019 - 2024. All rights reserved.