itsource

파이썬의 배열 필터?

mycopycode 2023. 7. 26. 22:05
반응형

파이썬의 배열 필터?

예를 들어, 나는 두 개의 목록을 가지고 있습니다.

 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이 말했듯이, 다음과 같은 경우 성능이 크게 향상될 것입니다.subset_of_A실제set회원 자격을 확인한 이후.set목록의 O(n)와 비교하여 O(1)입니다.

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(lambda x: x not in subset_of_A, A)

set(A)-set(subset_of_A)원하는 결과 집합을 제공하지만 원래 순서는 유지되지 않습니다.다음은 질서 유지입니다.

[a for a in A if not a in subset_of_A]

아니요, 파이썬에는 이를 위한 내장 함수가 없습니다. 단순하게 다음과 같은 이유 때문입니다.

set(A)- set(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.그런 다음 다른 답변과 같이 설정 작업을 사용할 수 있습니다.

그러나 이러한 작업에 대해서만 목록을 세트로 변환하고 다시 변환하는 것은 목록 이해보다 느립니다.

사용Set유형:

A_set = Set([6,7,8,9,10,11,12])
subset_of_A_set = Set([6,9,12])

result = A_set - subset_of_A_set
>>> a = set([6, 7, 8, 9, 10, 11, 12])
>>> sub_a = set([6, 9, 12])
>>> a - sub_a
set([8, 10, 11, 7])
>>> A           = [6, 7, 8, 9, 10, 11, 12]
>>> subset_of_A  = [6, 9, 12];
>>> set(A) - set(subset_of_A)
set([8, 10, 11, 7])
>>> 

언급URL : https://stackoverflow.com/questions/5640630/array-filter-in-python

반응형