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

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

Patricia Arquette
发布: 2024-12-01 09:37:09
原创
594 人浏览过

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板