您好,我正在尝试弄清楚如何使用 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/