2010-11-19 84 views
4

我該如何避免在生成器中添加重複條目或在已經存在的情況下刪除它們?python生成器複製

如果我應該使用別的東西,請諮詢。

+2

顯示一些代碼...我們甚至不知道你的發電機應該做什麼。 – ThiefMaster 2010-11-19 22:49:02

回答

9

如果值是哈希的,刪除重複的最簡單,最笨的方法是使用一個set

values = mygenerator() 
unique_values = set(values) 

但是要注意:套不記得是什麼命令值最初所以這會擾亂序列。

爲了您的目的,下面的函數可能會比set更好。它過濾掉重複沒有得到任何其他值的亂序:

def nub(it): 
    seen = set() 
    for x in it: 
     if x not in seen: 
      yield x 
      seen.add(x) 

呼叫nub有一個說法,可哈希值的任何迭代。它返回一個迭代器,它產生所有相同的項目,但刪除了重複項。

+0

+1,很好的裝飾者 – fmark 2010-11-20 00:21:30

3

itertools.groupby()如果您願意做一些工作,可以摺疊相鄰的重複項。

print [x[0] for x in itertools.groupby([1, 2, 2, 3])] 
+0

儘管輸入應該排序,但仍然非常好! – Ale 2015-03-10 19:25:49