假设我们有一个列表,并且希望对并发的相同元素进行重复数据删除
['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']
答案 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']