【问题标题】:Remove near-duplicate elements in Python list while preserving variables删除 Python 列表中几乎重复的元素,同时保留变量
【发布时间】:2013-03-25 05:30:09
【问题描述】:

我有一个列表,其中包含几乎重复的元素,但标识该元素的数字除外。我想删除所有重复项,同时保留包含重复项的第一个元素的编号。

比如我想把l换成lnew

l = ['iter1apple','iter2banana','iter3carrot','iter4apple','iter5orange','iter6banana','iter7mango']

lnew = ['iter1apple','iter2banana','iter3carrot','iter5orange','iter7mango']

我猜这与从列表元素的其余部分拆分数字、将列表转换为 set 并将 defaultdict 与拆分中的元素一起使用有关,但我不知道如何。

任何建议将不胜感激。

【问题讨论】:

  • 那么您是如何决定删除iter4appleiter6banana 的?一般的解决方案类似于lnew = [elem for elem in l if elem not in discardable],其中discardable 是您要删除的一组。
  • @hughdbrown:discardable 未预定义。我正在尝试根据元素位置确定什么构成可丢弃,以及它是否是具有较低 iter 数字的元素的副本。

标签: python list


【解决方案1】:

如果我对您的理解正确,您想丢弃以一个已包含在列表中的元素结尾的项目。在这种情况下,您可以使用正则表达式和列表来跟踪已使用的元素:

import re

l = ['iter1apple', 'iter2banana', 'iter3carrot', 'iter4apple', 'iter5orange', 'iter6banana', 'iter7mango']
duplicates = []
lnew = []
for item in l:
    match = re.match("^iter\d+(\w+)$", item)
    if match and not match.group(1) in duplicates:
        duplicates.append(match.group(1))
        lnew.append(item)

# lnew = ['iter1apple','iter2banana','iter3carrot','iter5orange','iter7mango']

【讨论】:

    猜你喜欢
    • 2020-10-02
    • 2021-03-20
    • 2013-01-17
    • 1970-01-01
    • 2021-05-19
    • 1970-01-01
    • 2019-12-03
    • 2021-06-16
    • 2019-04-07
    相关资源
    最近更新 更多