您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

用于在Python中删除重复项的Iterator对象

用于在Python中删除重复项的Iterator对象

更好地创建一个生成函数,像这样

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

您可以参考此答案,以及Python 3数据模型文档中的迭代器类型”部分。

python 2022/1/1 18:49:53 有380人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶