簡體   English   中英

清單清單之間的差異

[英]Difference between list of lists

我有兩個清單

A=[['1','1'],['2','1'],['3','2']]

B=[['1','1'],['2','2']]

我只想對這些比較第一個元素執行AB操作。

所以AB應該給

Output=[['3', '2']]

到目前為止,我只能進行行比較

[x for x in A if not x in B]

輸出為[['2', '1'], ['3', '2']]

這個?

>>> [i for i in A if not any(i[0] == k for k, _ in B)]
[['3', '2']]

any()用於檢查每個列表的第一個元素是否與B中每個列表中的任何其他值相同。 如果是,它將返回True,但是由於我們需要與此相反,因此我們not any(...)使用not any(...)

您還可以使用collections.OrderedDict並在此處設置差異:

>>> from collections import OrderedDict
>>> dic1 = OrderedDict((k[0],k) for k in A)
>>> [dic1[x] for x in set(dic1) - set(y[0] for y in B)]
[['3', '2']]

總體復雜度將為O(max(len(A), len(B)))

如果順序無關緊要,那么通常的命令就足夠了。

我可以想到一個不同的列表理解

A=[['1','1'],['2','1'],['3','2']]
B=[['1','1'],['2','2']]
b = dict(B)
output_list = [item for item in A if item[0] not in b]

這也是保持順序的,即使A的內部列表中有重復的拳頭元素,它也可以工作。如果需要,還可以擴展它以檢查確切的對,例如:

A=[['1','1'],['2','1'],['3','2']]
B=[['1','1'],['2','2']]
b = dict(B)
output_list = [item for item in A if item[0] not in b or b[item[0]] != item[1]]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM