【问题标题】:Python: Remove **concurrent** identical elements in a list without a loop [duplicate]Python:在没有循环的情况下删除列表中的**并发**相同元素[重复]
【发布时间】:2019-05-16 10:00:05
【问题描述】:

假设我们有一个列表,我们想要删除并发相同元素的重复数据

['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']

【问题讨论】:

    标签: python list


    【解决方案1】:

    使用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']
    

    【讨论】:

      猜你喜欢
      • 2021-10-22
      • 2018-04-02
      • 2020-02-03
      • 1970-01-01
      • 1970-01-01
      • 2022-01-22
      • 1970-01-01
      • 2021-10-12
      • 1970-01-01
      相关资源
      最近更新 更多