python - 删除具有连续重复的元素

标签 python list duplicates

我很好奇这个问题:Eliminate consecutive duplicates of list elements ,以及它应该如何在 Python 中实现。

我想出的是这样的:

list = [1,1,1,1,1,1,2,3,4,4,5,1,2]
i = 0

while i < len(list)-1:
    if list[i] == list[i+1]:
        del list[i]
    else:
        i = i+1

输出:

[1, 2, 3, 4, 5, 1, 2]

我觉得还可以。

所以我很好奇,想看看我是否可以删除连续重复的元素并得到这个输出:

[2, 3, 5, 1, 2]

为此,我这样做了:

list = [1,1,1,1,1,1,2,3,4,4,5,1,2]
i = 0
dupe = False

while i < len(list)-1:
    if list[i] == list[i+1]:
        del list[i]
        dupe = True
    elif dupe:
        del list[i]
        dupe = False
    else:
        i += 1

但这似乎有点笨拙而不是pythonic,你有什么更聪明/更优雅/更有效的方法来实现它吗?

最佳答案

>>> L = [1,1,1,1,1,1,2,3,4,4,5,1,2]
>>> from itertools import groupby
>>> [key for key, _group in groupby(L)]
[1, 2, 3, 4, 5, 1, 2]

第二部分

>>> [k for k, g in groupby(L) if len(list(g)) < 2]
[2, 3, 5, 1, 2]

如果您不想仅仅为了获取长度而创建临时列表,您可以使用 sum 而不是生成器表达式

>>> [k for k, g in groupby(L) if sum(1 for i in g) < 2]
[2, 3, 5, 1, 2]

关于python - 删除具有连续重复的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5738901/

相关文章:

python - Pyside,PyQt4 : How to set a validator when editing a cell in a QTableView

python - 对于第三个列表中给定数量的元素,返回两个列表之间的字符串匹配

javascript - 如何在 JavaScript 中查找对象数组中的重复项?

javax.el.E​​LException : java. java.util.AbstractList.add 处的 lang.UnsupportedOperationException

python - 如何检查一个列表是否包含另一个列表的 2 个元素?

file - Google Apps 脚本复制文件

java - 整数数组中的重复数字(Java 基础级别)和时间复杂度

python - Keras 2.3.0 度量准确度、精确度和召回率的相同值

python - 使用交替运算符匹配多个正则表达式模式?

python - 如何将起始序列号传递给 Django factory_boy 工厂?