如果想根据每个嵌套列表的第一个元素评估重复项,是否可以建议一个很好的解决方案来从嵌套列表中删除重复项?
主要列表如下所示:
L = [['14', '65', 76], ['2', '5', 6], ['7', '12', 33], ['14', '22', 46]]
如果在第一个位置[k][0]
存在另一个已经发生相同元素的列表,那么我想删除该列表并获得此结果:
L = [['14', '65', 76], ['2', '5', 6], ['7', '12', 33]]
你能建议一种算法来实现这个目标吗?
答案 0 :(得分:29)
您是否关心保留订单/删除哪些副本?如果没有,那么:
dict((x[0], x) for x in L).values()
会做到的。如果您想保留订单,并希望保留您找到的第一个订单:
def unique_items(L):
found = set()
for item in L:
if item[0] not in found:
yield item
found.add(item[0])
print list(unique_items(L))
答案 1 :(得分:4)
使用dict代替:
L = {'14': ['65', 76], '2': ['5', 6], '7': ['12', 33]}
L['14'] = ['22', 46]
如果您从某个外部来源收到第一个列表,请将其转换为:
L = [['14', '65', 76], ['2', '5', 6], ['7', '12', 33], ['14', '22', 46]]
L_dict = dict((x[0], x[1:]) for x in L)
答案 2 :(得分:0)
我不确定你的“另一个名单”是什么意思,所以我假设你在L里面说那些名单
a=[]
L = [['14', '65', 76], ['2', '5', 6], ['7', '12', 33], ['14', '22', 46],['7','a','b']]
for item in L:
if not item[0] in a:
a.append(item[0])
print item
答案 3 :(得分:0)
如果订单无关紧要,请输入以下代码
print [ [k] + v for (k, v) in dict( [ [a[0], a[1:]] for a in reversed(L) ] ).items() ]
给出
[['2','5','6'],['14','65','76'],['7','12','33']]
答案 4 :(得分:0)
使用熊猫:
import pandas as pd
L = [['14', '65', 76], ['2', '5', 6], ['7', '12', 33], ['14', '22', 46],['7','a','b']]
df = pd.DataFrame(L)
df = df.drop_duplicates()
L_no_duplicates = df.values.tolist()
如果要删除特定列中的重复项,请仅使用:
df = df.drop_duplicates([1,2])