【发布时间】:2018-07-16 00:16:11
【问题描述】:
我想创建一个循环输入可迭代序列的生成器函数,一次生成一个元素,但跳过重复项。示例代码如下:
numbers = [4, 5, 2, 6, 2, 3, 5, 8]
nums = unique(numbers)
next(nums)
4
next(nums)
5
next(nums)
2
next(nums)
6
next(nums)
3
next(nums)
8
有没有人知道为什么这段代码没有打印出来?
def unique(iterable):
seen = set()
for n in iterable:
if n not in seen:
seen.add(n)
yield n
numbers = [4, 5, 2, 6, 2, 3, 5, 8]
nums = unique(numbers)
print(next(nums))
【问题讨论】:
-
python中的缩进非常重要,
seen.add()和yield都需要缩进到if语句之外。 -
你从哪里得到这个代码?这几乎与
itertools文档中的unique_everseen配方相同,这让我觉得你是从那里得到的,或者是从熟悉该代码的人那里得到的,并从记忆中重写了它。因此,您应该能够将您的代码与您复制的代码进行比较,并查看缩进的差异。 -
我这样做了,但它仍然没有改变输出。代码是否还有其他问题可能导致无法打印?
-
@abarnert 我从以下答案之一获得了代码。
-
如果以下答案之一解决了您的问题,您应该接受它(单击相应答案旁边的复选标记)。这有两件事。它让每个人都知道您的问题已得到您满意的解决,并为帮助您的人提供帮助。有关完整说明,请参阅here。
标签: python python-3.x unique