2013-03-24 88 views
0

我有一个包含近似重复元素的列表,但标识元素的数字除外。我想删除所有重复项,同时保留包含重复的第一个元素的编号。在保留变量的同时删除Python列表中近似重复的元素

例如,我想与lnew更换l

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

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

我猜这事做与列表元素的其余部分分割数,转换列表中设置和使用defaultdict与分裂的元素,但我无法弄清楚如何。

任何建议,将不胜感激。

+0

那么您是如何决定删除'iter4apple'和'iter6banana'的?一般的解决方案就像'lnew = [elem for elem in l if elem not in discardable]''discardable'是你想要移除的那一组。 – hughdbrown 2013-03-24 21:15:47

+0

@hughdbrown:'discardable'不是预定义的。我试图根据元素位置确定什么构成可丢弃,以及它是否与具有较低'iter'号码的元素重复。 – user1185790 2013-03-24 21:28:02

回答

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'] 
+0

这个伎俩!谢谢A. Rodas! – user1185790 2013-03-24 21:37:52

+0

@ user1185790不客气,很高兴帮助! – 2013-03-24 21:52:25

相关问题