首页 >后端开发 >Python教程 >如何有效地从Python列表中删除连续的重复元素?

如何有效地从Python列表中删除连续的重复元素?

Patricia Arquette
Patricia Arquette原创
2024-12-01 09:37:09503浏览

How Can I Efficiently Remove Consecutive Duplicate Elements from a Python List?

删除连续重复的元素

数据处理中的一个常见任务是从列表中删除连续的重复项。一个简单的 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

虽然功能强大,但可以简化此方法。

更优雅的解决方案

Python 提供了更多用于列表操作的表达工具。使用 itertools.groupby:

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]

这使用 groupby 对连续的重复项进行分组,并过滤​​掉具有多个元素的组,从而有效地删除重复的元素。

如果需要,您可以使用生成器表达式来避免创建临时列表:

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

以上是如何有效地从Python列表中删除连续的重复元素?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn