2017-03-18 7 views
1

言ってやるが、私は以下のようなリストを持っている:重複した連続するタプルをリストから削除しますか?

[(2, 1), (1, 0), (1, 0), (1,0), (2,1), (2, 1)] 

私は重複連続したタプルを削除したいです。上記の例ではので、それは返す必要があります:

[(2, 1), (1, 0), (2, 1)] 
+0

リスト内の連続するリピートのみ、またはすべての重複を削除したいですか? – James

+0

@James:連続したリピートのみ – Fraz

答えて

10

itertools.groupbyを使用できます。

from itertools import groupby 

x = [(2, 1), (1, 0), (1, 0), (1, 0), (2, 1), (2, 1)] 
x_grouped = [i for i, j in groupby(x)] 
# [(2, 1), (1, 0), (2, 1)] 
6

は、あなただけの前の1に等しくない要素を生成するジェネレータを使用することができます。

def filter_consecutive_duplicates(it): 
    prev = object() # sentinel object, won't be equal to anything else 
    for elem in it: 
     if elem != prev: 
      yield elem 
     prev = elem 

デモ:

>>> list(filter_consecutive_duplicates([(2, 1), (1, 0), (1, 0),(1,0),(2,1), (2, 1)])) 
[(2, 1), (1, 0), (2, 1)] 
1
a=[(2, 1), (1, 0), (1, 0), (1,0), (2,1), (2, 1)] 
a=[elem for count,elem in enumerate(a) if elem!=a[count-1] or count==0] 

このリストの理解はいかがですか

関連する問題