2016-09-18 3 views
1

저는이 두 목록을 가지고 있지만 다른 하나를 뺄 필요가 있습니다. 그러나 정규 "-"는 작동하지 않으며, 둘 중 하나는 교차 부분이나 XOR (^)입니다.두 개의 튜플 목록을 뺍니다

A = [(0, 1)] 
B = [(0, 0), (0,1), (0, 2)] 

는 기본적으로 내가 원하는 것은 :

B - A = [(0, 0), (0, 2)] 

답변

2
당신은이 문제를 해결하기 위해 지능형리스트를 사용할 수 있습니다

:

더 많은 토론을 찾을 수

[item for item in B if item not in A] 
here

2

가있는 경우 BA에 중복 튜플이 없을 수도 있습니다. b 전자보다 세트로 유지하고, 세트의 difference 사용 : 두 세트 사이의 intersection 찾을처럼

A = [(0, 1)] 
B = [(0, 0), (0,1), (0, 2)] 
diff = set(B) - set(A) # or set(B).difference(A) 
print(diff) 
# {(0, 0), (0, 2)} 

당신은 다른 작업을 수행 할 수 있습니다 :

>>> set(B) & set(A) 
{(0, 1)} 

심지어 걸릴 그들의 symmetric_difference :

>>> set(B)^set(A) 
{(0, 0), (0, 2)} 
+0

하는'.difference 같은 방법을 사용하는 경우 ''A'를 집합으로 변환 할 필요가 없으므로 임의의 반복을 취할 수 있습니다. –

+0

@JonClements 아, 그렇습니다. 감사 –

0

목록을 집합으로 변환하여 이러한 작업을 수행 할 수 있습니다. 설정의 차이 : 필요한 경우

r = set(B)-set(A) 

변환이 나열 : 목록 (R)

세트에서 작업하는 목록에서 작업 "에서"실행에 비해 효율적이다 : using lists vs sets for list differences

관련 문제