删除连续重复的元素
数据处理中的一个常见任务是从列表中删除连续的重复项。一个简单的 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中文网其他相关文章!