python - 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))
解决方案
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]
推荐阅读
- verilog - 数组需要在 always @(my_array) 块上的数组索引(在 Verilog 中实现寄存器冒泡)
- c++ - clang/gcc c++,编译器是否可以输出每个.cpp中所有初始化模板的列表?
- python - 如何将图像保存在动态文件夹中?
- git - 将 gitlab 存储库克隆到 Azure Devops 并在 Azure 存储库上保持同步
- javascript - 如何在控制台上查看我上传的图片名称?
- sql - 如何删除 ' | ' 使用 sql 时的字符?
- html - 在选项卡中添加悬停下拉选择
- c - CS50,复数问题,给出错误的结果
- azure - 使用 Powershell/Azure CLI 禁用对 Cosmos DB 的数据中心网络访问
- docker - 如何通过docker加载psql?