2017-06-16 34 views
1

當列表的第一個值與列表中的另一個項目重複時,我想刪除列表中的項目。當Python中的第一項重複時,只保留列表列表中的最後一個值

比方說,我有這樣的名單:

[['A', 'Value 1', 'Value 2'],['B', 'Value 3', 'Value 4'],['A', 'Value 5', 'Value 6']] 

我想只保留最後一個列表帶有值作爲第一指標,比如:

[['B', 'Value 3', 'Value 4'],['A', 'Value 5', 'Value 6']] 
+0

你到目前爲止嘗試過什麼? –

+0

你想讓結果列表與原始序列相同,還是不重要? –

回答

6

你可以這樣做用詞典理解;因爲通過遍歷一系列值來建立一個字典,你總是會得到最後一個重複。然後您可以簡單地獲取字典的值。

original = [['A', 'Value 1', 'Value 2'],['B', 'Value 3', 'Value 4'],['A', 'Value 5', 'Value 6']] 
d = {elem[0]: elem for elem in original} 
result = list(d.values()) 
+0

我輸入完全相同的東西,然後我看到你的答案。無論如何,加上+1。好答案。 – void

+0

這隻適用於結果列表中的排序不重要的情況,因爲它不會保留原始排序。 –

+0

非常感謝!這像一個魅力。順序並不重要,正如Blotosmetek所評論的那樣。 –

1

使用itertools.groupby()功能:

import itertools 
l = [['A', 'Value 1', 'Value 2'],['B', 'Value 3', 'Value 4'],['A', 'Value 5', 'Value 6']] 
result = [list(g)[-1] for k,g in itertools.groupby(sorted(l), key=lambda x: x[0])] 

print(result) 

輸出:

[['A', 'Value 5', 'Value 6'], ['B', 'Value 3', 'Value 4']] 
0
l = [['A', 'Value 1', 'Value 2'],['B', 'Value 3', 'Value 4'],['A', 'Value 5', 'Value 6']] 
l.pop(0) 
print(l) 
+0

雖然此代碼可能會回答問題,但提供有關如何解決問題和/或爲何解決問題的其他上下文會提高答案的長期價值。 – Badacadabra

0

您也可以嘗試這種方式,雖然它不是一個有效的解決方案。

original = [['A', 'Value 1', 'Value 2'],['B', 'Value 3', 'Value 4'],['A', 'Value 5', 'Value 6'],] 
first_element_count = [] 
for ls in original: 
    first_element_count.append(ls[0]) 
seen, result = set(), [] 
len_first_element=len(first_element_count)-1 
# finding the index of duplicate element and store the first index 
while len_first_element>=0: 
    item = first_element_count[len_first_element] 
    if item not in seen: 
     seen.add(item) 
    else: 
     result.append(len_first_element) 

    len_first_element = len_first_element - 1 
# removing the list from the list 
for i in result: 
    del original[i] 
print(original) 
相關問題