3

私はPythonの初心者で、プロジェクトを行っているときに物事を学んでいます。ここには、Aで見つかった差分を比較して分離する必要があるリストの2つのリストがあります-> Bと差分が見つかったb-> Aは何ですか比較する最良の方法.

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

3 に答える 3

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')]
于 2012-06-20T05:36:59.513 に答える
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']]
于 2012-06-20T05:09:32.257 に答える
1

リスト内包表記を使用するだけです

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からGeneratorset()を使う

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>
于 2012-06-20T05:46:23.007 に答える