d'c*_*ang 2 python iterator object
嗨,所以我试图弄清楚如何使用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:
Run Code Online (Sandbox Code Playgroud)
我实际上并不完全确定在这个问题上接下来要做什么.在此先感谢任何意见或帮助!
更好地创建一个生成器函数,像这样
>>> def unique_values(iterable):
... seen = set()
... for item in iterable:
... if item not in seen:
... seen.add(item)
... yield item
...
Run Code Online (Sandbox Code Playgroud)
然后你可以创建一个独特值的元组,就像这样
>>> tuple(unique_values((1, 2, 3, 3, 4, 4, 5)))
(1, 2, 3, 4, 5)
Run Code Online (Sandbox Code Playgroud)
如果您确定数据将始终排序,那么您可以避免创建集合并仅跟踪以前的数据,如下所示
>>> 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)
Run Code Online (Sandbox Code Playgroud)
您可以使用类来编写迭代器对象
>>> 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
Run Code Online (Sandbox Code Playgroud)
您可以参考这个答案,以及Python 3数据模型文档中的迭代器类型部分
| 归档时间: |
|
| 查看次数: |
764 次 |
| 最近记录: |