Python:无循环地删除列表中的并发相同元素

时间:2019-05-16 10:00:06

标签: python list

假设我们有一个列表,并且希望对并发的相同元素进行重复数据删除

['a', 'b', 'b', 'a', 'b']

将成为

['a', 'b', 'a', 'b']

或另一个

['a', 'b', 'c', 'c', 'a', 'b', 'b']

将成为

['a', 'b', 'c', 'a', 'b']

我想尽可能有效地做到这一点。

我的解决方案似乎很麻烦。使用枚举循环并添加要删除的索引位置,然后在执行循环后再次循环删除索引位置上的所有元素。

理想情况下,我想避免在生产过程中完全循环,我将遍历包含许多元素的非常长的列表。

eg = ['a', 'b', 'c', 'c', 'a', 'b', 'b']

remove = []

for x in enumerate(eg[:-1]):
        if x[1] == eg[x[0]+1]:
            remove.append(x[0])

for index in sorted(remove, reverse=True):
    del eg[index]

例如

['a', 'b', 'c', 'a', 'b']

1 个答案:

答案 0 :(得分:2)

使用itertools.groupby,并且仅理解迭代器中的键:

>>> from itertools import groupby
>>> l = ['a', 'b', 'c', 'c', 'a', 'b', 'b']
>>> [k for k, _ in groupby(l)]
['a', 'b', 'c', 'a', 'b']