2017-06-06 68 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)