2017-06-06 71 views
2
x1 = [5, 5] 
x2 = [1, 5, 5, 2] 
x3 = [5, 5, 1, 2, 5, 5] 
x4 = [5, 5, 1, 5, 5, 2, 5, 5] 
x5 = [5, -5] 
x6 = [1, 2, 3, 4] 
x7 = [5, 5, 5, 5, 5, 5] 

如何刪除每個列表上彼此相鄰的重複值中的一個如何刪除列表中相鄰的重複值之一?

之後是彼此相鄰被刪除重複值的所有之一,他們應該是這樣的:

x1 = [5] 
x2 = [1, 5, 2] 
x3 = [5, 1, 2, 5] 
x4 = [5, 1, 5, 2, 5] 
x5 = [5, -5] 
x6 = [1, 2, 3, 4] 
x7 = [5] 
+5

如果連續有三個值會發生什麼? –

+0

那麼它仍然是一個重複的,兩個相同的值將被刪除,一個將保留。編輯:添加x7 –

+0

這是你的功課嗎? –

回答

3

當有可能在一排三個或更多的值,只有一個值被通緝:

from itertools import groupby 

def remove_consecutive_duplicates(iterable): 
    return [v for v, g in groupby(iterable)] 
4

簡單列表理解會做:

>>> x = [5, 5, 1, 5, 2, 5, 5] 
>>> [a for a, b in zip(x, x[1:]) if a != b] + [x[-1]] 
[5, 1, 5, 2, 5] 

你基本上是採取每個元素如果下一個不同,加上最後一個元素。

+0

我不希望看到有人向沒有付出努力的提問者發回作業回答。 –

+0

@JamesKPolk我通常也會這樣做,除非這不是家庭作業(也許是學習),它需要一個半平凡的解決方案,這意味着它沒有一半的解決方案 – Uriel

+0

嗯,這是一個很好的答案。 –

1

您可以直接在你的列表循環,而跟蹤前值,並只保留下一個值如果它們不同:

def uniquefy_conseq_vals(my_list): 
    prev = None 
    new_list = [] 
    for ele in my_list: 
     if ele != prev: 
      new_list.append(ele) 
     prev = ele 
    return new_list 

if __name__ == "__main__": 

    x1 = [5, 5] 
    x2 = [1, 5, 5, 2] 
    x3 = [5, 5, 1, 2, 5, 5] 
    x4 = [5, 5, 1, 5, 5, 2, 5, 5] 
    x5 = [5, -5] 
    x6 = [1, 2, 3, 4] 
    x7 = [5, 5, 5, 5, 5, 5] 

    print uniquefy_conseq_vals(x1) 
    print uniquefy_conseq_vals(x2) 
    print uniquefy_conseq_vals(x3) 
    print uniquefy_conseq_vals(x4) 
    print uniquefy_conseq_vals(x5) 
    print uniquefy_conseq_vals(x6) 
    print uniquefy_conseq_vals(x7)