gpt4 book ai didi

python - 用于在 Python 中删除重复项的迭代器对象

转载 作者:行者123 更新时间:2023-11-28 21:50:22 26 4
gpt4 key购买 nike

您好,我正在尝试弄清楚如何使用 Python 创建一个迭代器对象,该对象将删除重复项或更多项,以便省略重复项。

例如我有一个列表 (1, 2, 3, 3, 4, 4, 5) 并且我得到 (1, 2, 3, 4, 5)

我明白,为了获得一个迭代器对象,我必须创建它。所以:

Class Unique:
def __init__(self, n):
self.i = 0
self.n = n

def __iter__(self):
return self

def __next__(self):
if self.i < self.n:

实际上我并不完全确定在这个问题上下一步该做什么。在此先感谢您的任何评论或帮助!

最佳答案

最好像这样创建一个生成器函数

>>> def unique_values(iterable):
... seen = set()
... for item in iterable:
... if item not in seen:
... seen.add(item)
... yield item
...

然后你可以像这样创建一个唯一值的元组

>>> tuple(unique_values((1, 2, 3, 3, 4, 4, 5)))
(1, 2, 3, 4, 5)

如果您确定数据将始终排序,那么您可以避免创建集合并仅跟踪以前的数据,就像这样

>>> def unique_values(iterable):
... it = iter(iterable)
... previous = next(it)
... yield previous
... for item in it:
... if item != previous:
... previous = item
... yield item
>>> tuple(unique_values((1, 2, 3, 3, 4, 4, 5)))
(1, 2, 3, 4, 5)

你可以写一个迭代器对象,有一个类,像这样

>>> class Unique:
... def __init__(self, iterable):
... self.__it = iter(iterable)
... self.__seen = set()
...
... def __iter__(self):
... return self
...
... def __next__(self):
... while True:
... next_item = next(self.__it)
... if next_item not in self.__seen:
... self.__seen.add(next_item)
... return next_item
...
>>> for item in Unique((1, 2, 3, 3, 4, 4, 5)):
... print(item)
...
1
2
3
4
5

可以引用this answer , 和 Iterator Types section in Python 3 Data Model documentation

关于python - 用于在 Python 中删除重复项的迭代器对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32012878/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com