我正在尝试创建一个生成器函数,该函数在消除重复项的同时循环遍历可迭代的序列,然后一次按顺序返回每个结果(而不是集合或列表),但是我很难使它起作用。我在这里发现了类似的问题,但是响应非常一致,导致生成了一个列表。
我希望输出为:
>>> 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
我不知道我是要丢东西还是放太多东西。谢谢您的帮助。
简单地说,您需要一些东西来“记住”找到的值。在第一个函数中,您使用的是新列表本身,但是在第二个函数中,您没有它,因此失败。您可以为此使用set()
。
尝试一下: