[python] 파이썬의 배열 필터?

예를 들어, 두 개의 목록이 있습니다.

 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실제 이면 성능이 크게 향상됩니다 .setset

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 를 사용하는 것이 더 나을 수 있습니다 . 그런 다음 집합 작업을 사용할 수 있습니다. 다른 답변과 같은 .

그러나 이러한 작업에 대해서만 목록을 집합으로 변환하고 다시 되 돌리는 것은 목록 이해보다 느립니다.