Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 列表之间的差异_Python_List_Compare - Fatal编程技术网

Python 列表之间的差异

Python 列表之间的差异,python,list,compare,Python,List,Compare,我有两张单子 A=[['1','1'],['2','1'],['3','2']] B=[['1','1'],['2','2']] 我只想对第一个元素执行A-B操作 所以A-B应该给 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

我有两张单子

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

B=[['1','1'],['2','2']]
我只想对第一个元素执行A-B操作

所以A-B应该给

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,但由于我们希望与此相反,我们使用
而不是任何(…)
您也可以在此处使用并设置差异:

>>> 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))


如果顺序不重要,那么一个普通的dict就足够了。

我可以想出一个不同的列表理解

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的内部列表中有重复的fist元素,也可以工作。如果需要,也可以扩展它以检查精确的fist元素对,如下所示:

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]]

只是想知道,与您提供的上一个解决方案相比,当前解决方案在计算上是否昂贵?@JohnGalt我交换解决方案的原因是因为我的另一个解决方案不正确。它还将比较列表中的第二个值(在
B
中),您不希望重复的元素像['1',1'],['1',2'],['2',2']?