2016-11-07 3 views

答えて

1

あなたは可能性があり最後に見た値を記録し、現在の値と同じ場合は新しいリストに追加します:

これらの両方が何度も重複以上を追加することを

duplicates = [ 
    item 
    for previous, item in zip(numbers, numbers[1:] 
    if previous == item 
] 

注:

duplicates = [] 
for previous, item in zip(numbers, numbers[1:]): 
    if previous == item: 
     duplicates.append(item) 

同等list comprehension:210

numbers = [1,1,2,4,5,6,5] 
duplicates = [] 
previous = None 
for n in numbers: 
    if n == previous: 
     duplicates.append(n) 
    previous = n 

また、あなたループとして、前の項目を表示するzipを使用して、リストをスライスできそれらが連続して複数回出現する場合。

0

隣接する重複を見つけるには、アイテムのリストを繰り返し、現在のものと次のものを比較できます。

items = [1, 1, 2, 4, 5, 6, 5] 

for i, item in enumerate(items): 
    # don't compare last item to avoid going out of range 
    if i < len(items) - 1: 
     if item == items[i + 1]: 
      print 'duplicate found', item, items[i + 1] 

これは、ループから最後の項目を削除することによってさらに最適化できます。これにより、最後の項目にないことを確認するために、ifのチェックを行う必要がなくなります。

items = [1, 1, 2, 4, 5, 6, 5] 

for i, item in enumerate(items[:-1]): 
    if item == items[i + 1]: 
     print 'duplicate found', item, items[i + 1] 
2

連続で繰り返される値が発見されなければならないならば、私はitertools.groupby使用したい:

items = [1,1,2,4,5,6,5] 

[g for g, l in itertools.groupby(items) if len(list(l)) > 1] 

他の方法をあなたのリストをビュンと隣接する値を比較することができます

[e1 for e1, e2 in zip(items, items[1:]) if e1 == e2] 
関連する問題