2017-06-16 23 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) 
相关问题