2013-03-24 84 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

相關問題