如何删除列表中彼此相邻的重复值之一?

时间:2017-06-06 15:00:48

标签: python list duplicates

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]

3 个答案:

答案 0 :(得分: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]

如果下一个元素不同,加上最后一个元素,你基本上都会使用每个元素。

答案 1 :(得分:3)

如果一行中可以有三个或更多值,并且只需要一个值:

(is_master, id_c)

答案 2 :(得分: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)