예를 들어, 두 개의 목록이 있습니다.
A = [6, 7, 8, 9, 10, 11, 12]
subset_of_A = [6, 9, 12]; # the subset of A
the result should be [7, 8, 10, 11]; the remaining elements
이 작업을 수행하는 파이썬에 내장 함수가 있습니까?
답변
순서가 중요하지 않은 경우 set.difference
. 그러나 순서를 유지하려면 간단한 목록 이해만으로 충분합니다.
result = [a for a in A if a not in subset_of_A]
편집 : delnan이 말했듯이, 목록의 O (n)에 비해 a의 멤버십을 확인하는 것이 O (1) 이기 때문에 subset_of_A
실제 이면 성능이 크게 향상됩니다 .set
set
A = [6, 7, 8, 9, 10, 11, 12]
subset_of_A = set([6, 9, 12]) # the subset of A
result = [a for a in A if a not in subset_of_A]
답변
예, filter
기능 :
filter(lambda x: x not in subset_of_A, A)
답변
아니요, 파이썬에는이 작업을 수행하는 함수가 없습니다. 그 이유는 다음과 같습니다.
set(A)- set(subset_of_A)
당신에게 답을 줄 것입니다.
답변
set(A)-set(subset_of_A)
의도 한 결과 집합을 제공하지만 원래 순서는 유지하지 않습니다. 다음은 주문 보존입니다.
[a for a in A if not a in subset_of_A]
답변
tuple(set([6, 7, 8, 9, 10, 11, 12]).difference([6, 9, 12]))
답변
어때
set(A).difference(subset_of_A)
답변
이것은 며칠 전에 요청되었지만 찾을 수 없습니다.
>>> A = [6, 7, 8, 9, 10, 11, 12]
>>> subset_of_A = set([6, 9, 12])
>>> [i for i in A if i not in subset_of_A]
[7, 8, 10, 11]
set
컨텍스트에 따라 처음부터 s 를 사용하는 것이 더 나을 수 있습니다 . 그런 다음 집합 작업을 사용할 수 있습니다. 다른 답변과 같은 .
그러나 이러한 작업에 대해서만 목록을 집합으로 변환하고 다시 되 돌리는 것은 목록 이해보다 느립니다.