用于在Python中删除重复项的迭代器对象
大家好,我正试图弄清楚如何使用Python创建一个迭代器对象,它可以删除重复项或更多项,从而省略重复项 例如,我有一个列表(1,2,3,3,4,4,5),我得到(1,2,3,4,5) 我知道为了得到迭代器对象,我必须创建它。因此:用于在Python中删除重复项的迭代器对象,python,object,iterator,Python,Object,Iterator,大家好,我正试图弄清楚如何使用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
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:
类唯一性:
定义初始化(self,n):
self.i=0
self.n=n
定义(自我):
回归自我
定义下一个(自我):
如果self.i
实际上,我并不完全确定在这个问题上下一步该怎么办。提前感谢您的任何意见或帮助 最好创建一个生成器函数,如下所示
>>> 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
然后您可以创建一个唯一值的元组,如下所示
>>> 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
如果您确信数据总是被排序的,那么您可以避免创建集合,只跟踪以前的数据,如下所示
>>> 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
您可以使用类编写迭代器对象,如下所示
>>> 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
您可以参考如果保留原始顺序不重要,只需使用
设置
:
values = (1, 3, 2, 5, 4, 3)
unique_values = set(values)
print unique_values
(1, 2, 3, 4, 5)
我了解如何创建生成器函数,但我想知道如何为同一方法创建迭代器对象。我正在复习考试,所以这真的很有帮助!请记住,这假设
iterable
中的项目是可散列的(以便可以将它们添加到集合中)。@thefourtheye谢谢,这很有意义,谢谢您的参考答案!为什么要创建一个新类,而不是使用集
或子类化集
?这更多的是一个练习来实现使用迭代器对象(在我的类中进行测验),它有助于理解迭代器是如何工作的。我理解使用“set”作为内置函数,但如果有人能帮我写这篇文章,我将不胜感激。