2017-05-23 14 views

答えて

2
lt = [ (1,2) , (1,2) , (2,3) , (3,4) , (5,6) , (7,8) , (7,8) ] 

mainList = [] 

for t in lt: 
    if len(mainList) == 0: 
    mainList.append(t) 
    else: 
    if mainList[-1] != t: 
     mainList.append(t) 

print(mainList) 

RESULT pairwise() function from the itertools reception sectionを使用して

[(1, 2), (2, 3), (3, 4), (5, 6), (7, 8)] 
5

from itertools import tee 

def pairwise(iterable): 
    "s -> (s0,s1), (s1,s2), (s2, s3), ..." 
    a, b = tee(iterable) 
    next(b, None) 
    return zip(a, b) 

mainList = [curr for curr, next in pairwise(lt) if curr != next] 

これはあなたに削除されたすべての連続したタプルで新しいリストを提供します。また、デフォルトのIDキーでitertools.groupby() functionを使用することができます。

from itertools import groupby 

mainList = [k for k, g in groupby(lt)] 

はデモ:複雑なリスト内包について

>>> from itertools import tee, groupby 
>>> lt = [ (1,2) , (1,2) , (2,3) , (3,4) , (5,6) , (7,8) , (7,8) ] 
>>> def pairwise(iterable): 
...  "s -> (s0,s1), (s1,s2), (s2, s3), ..." 
...  a, b = tee(iterable) 
...  next(b, None) 
...  return zip(a, b) 
... 
>>> [curr for curr, next in pairwise(lt) if curr != next] 
[(1, 2), (2, 3), (3, 4), (5, 6)] 
>>> [k for k, g in groupby(lt)] 
[(1, 2), (2, 3), (3, 4), (5, 6), (7, 8)] 
1

どのように?

[v for i, v in enumerate(lt) if i == o or v != lt[i-1]] 
-1

新しいリストを作成して、そのリストに要素を追加できます。要素が既に新しいリストにある場合は、追加しないでください。

lt = [ (1,2) , (1,2) , (2,3) , (3,4) , (5,6) , (7,8) , (7,8) ] 
newlt = [lt[0]] 
for item in range(len(lt)): 
    if item == 0: 
     continue 
    elif lt[item] == lt[item - 1]: 
     continue 
    else: 
     newlt.append(lt[item]) 
print(newlt) 

[(1, 2), (2, 3), (3, 4), (5, 6), (7, 8)] 

編集:これはうまくいくはずです。それは明らかに非常に基本的です。

+0

良い試行ですが、コードが不正確な結果を生成します。このリストでコードを試してください。 (1,2)、(1,2)、(2,3)、(3,4)、(5,6)、(7,8)、(7,8)、(1,2) ]。 index0と1は連続して重複しますが、最後の要素は重複しません。最後のコードも削除されます。 –

関連する問題