消除连续的重复元素并保留不同的元素
使用列表时,通常需要消除连续的重复元素。问题出现了:我们如何在保留不同元素的同时有效地删除这些元素?
一种方法是迭代列表,将每个元素与其后继元素进行比较。如果它们相同,我们删除当前元素。这种方法虽然实用,但效率相对较低,缺乏 Python 的优雅。
使用 GroupBy 优雅地去除重复
Python itertools 模块提供了一个名为 groupby 的强大函数,可以有效地对连续元素进行分组。通过使用groupby,我们可以用更少的代码行和更高的清晰度来实现我们的目标。
对于问题的第一部分(查找唯一元素),我们可以使用groupby对连续元素进行分组,然后选择键(代表独特元素)。
from itertools import groupby L = [1,1,1,1,1,1,2,3,4,4,5,1,2] unique_elements = [key for key, _group in groupby(L)]
输出:
[1, 2, 3, 4, 5, 1, 2]
保留独特性使用 Sum 的元素
为了进一步完善解决方案,我们需要消除具有连续重复项的元素。 groupby 再次为我们提供帮助。通过检查每个组的长度,我们可以确定某个元素是否不同。
distinct_elements = [k for k, g in groupby(L) if len(list(g)) < 2]
输出:
[2, 3, 5, 1, 2]
或者,我们可以使用生成器表达式来避免创建每个组的临时列表,而不是计算生成器的总和:
distinct_elements = [k for k, g in groupby(L) if sum(1 for i in g) < 2]
这提供了更紧凑、更高效的解决方案实现,有效消除连续的重复项,同时保留不同的元素。
以上是在Python中,我们如何有效地从列表中删除连续的重复项,同时保留唯一元素?的详细内容。更多信息请关注PHP中文网其他相关文章!