Python中两个LIST列表的高效比较

时间:2012-06-20 05:04:48

标签: python list

我是python的新手,只是学习东西,因为我做我的项目,这里我有两个列表列表,我需要比较和分离在A - >中找到的差异; B和差异发现b - >一个 比较的最佳方式是什么。

A=[[1L, 'test_case_1'], [1L, 'test_case_2'], [2L, 'test_case_1']]
B=[[1L, 'test_case_1'], [1L, 'test_case_4'], [2L, 'test_case_1'], [2L, 'test_case_3']]

3 个答案:

答案 0 :(得分:4)

假设您可以根据我的评论使用元组的列表,这对Junuxx答案的简单修改效率更高

A - B:

>>> setb = set(B)
>>> [x for x in A if not x in setb]
[(1L, 'test_case_2')]

B - A:

>>> seta = set(A)
>>> [x for x in B if not x in seta]
[(1L, 'test_case_4'), (2L, 'test_case_3')]

答案 1 :(得分:2)

您可以使用列表理解轻松完成此操作

A - B:

>>> [x for x in A if not x in B]
[[1L, 'test_case_2']]

B - A:

>>> [x for x in B if not x in A]
[[1L, 'test_case_4'], [2L, 'test_case_3']]

答案 2 :(得分:0)

只需使用List Comprehension

即可

A - B:

>>>[p for p in A if p not in B]
[[1L, 'test_case_2']]

B - A:

>>>[p for p in B if p not in A]
[(1L, 'test_case_4'), (2L, 'test_case_3')]

快速方式:首先可以将B设为set(),然后使用 Generator

A - B:

>>>B = [(l[0], l[1]) for l in B]
>>>set_b = set(B)
>>>(p for p in A if p not in set_b)
<generator object <genexpr> at 0x00BCBBE8>