首页 > 解决方案 > How to build a generator function to accomplish skipping duplicates

问题描述

I want to ake a generator function that loops over an input iterable sequence, yielding one element at a time, but skipping duplicates. An example code is below:

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

Does anyone ave any ideas why this code is not printing?

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))

标签: pythonpython-3.xunique

解决方案


A simple unique generator would just keep a set of items already seen, e.g.:

def unique(nums):
    seen = set()
    for n in nums:
        if n not in seen:
            seen.add(n)
            yield n

In []:
numbers = [4, 5, 2, 6, 2, 3, 5, 8]
list(unique(numbers))

Out[]:
[4, 5, 2, 6, 3, 8]

推荐阅读