Python在列表中查找新元素

Python finding new element in list

本问题已经有最佳答案,请猛点这里访问。

我想在liste2中找到这个新词。

1
2
3
4
5
6
7
8
9
10
11
liste1 = [['euro2016', '99'], ['portugal', '87'], ['ronaldo', '34']]
liste2 = [['euro2016', '90'], ['portugal', '75'], ['ronaldo', '44'], ['nani', '15']]


l1 = len(liste1)
l2 = len(liste2)

for x in range(0,l2):
    for y in range(0,l1):
        if liste2[x][0] not in liste1[y][0]:
            print liste2[x][0]

但我的代码给出了这样的结果:

euro2016

euro2016

portugal

portugal

ronaldo

ronaldo

nani

nani

nani

我想我必须搜索列表1[全部][0],但我不知道如何搜索。


I want to find the new word in liste2

您可以使用列表理解并应用仅在liste2中包含新项目的filter

1
2
3
4
result = [i[0] for i in liste2 if i[0] not in (j[0] for j in liste1)]
#                              ^      filtering is done here       ^
print(result)
# ['nani']

这里检查

1
[i for i in liste2 if i[0] not in [j[0] for j in liste1]]


您可以在每个列表项中创建一组第一个元素,然后获取差异。它将返回列表2中不在列表1中的项:

1
2
3
l3 = set(map(lambda x:x[0],liste1))
l4 = set(map(lambda x: x[0],liste2))
print list(l4.difference(l3))[0]

输出:

1
2
nani
>>>

1
2
3
4
5
6
In [8]: dict1 = dict(liste1)

In [9]: dict2 = dict(liste2)

In [10]: print(set(dict2.keys()) - set(dict1.keys()))
set(['nani'])