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

Python 如何删除列表中相邻的重复值之一?,python,list,duplicates,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,

如何删除每个列表上相邻的重复值之一

删除彼此相邻的所有一个重复值后,它们应如下所示:

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]

基本上,如果下一个元素不同,则取每个元素,再加上最后一个元素。

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

>>> 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]

您可以在跟踪上一个值的同时在列表上循环,如果下一个值不同,则只保留下一个值:

from itertools import groupby

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

如果一行中有三个值,会发生什么?它仍然是重复的,相同的两个值将被删除,一个将保留。编辑:这是你的家庭作业吗?你应该尊重别人。不是每个人都像你一样是专业人士、天才之类的。有些人只是新手、好奇、业余爱好者之类的。我讨厌看到有人给不努力的提问者家庭作业答案。@JamesKPolk我通常也这样做,只是这不是家庭作业(可能是学习),它要求一个半吊子的解决方案,也就是说它没有半吊子的解决方案。这不是目的吗?问你不知道的问题?我怎样才能尝试回答我不知道的问题?我努力在SO和Google中搜索这个问题,没有发现类似的问题。你希望我做什么?
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)