반응형
파이썬의 배열 필터?
예를 들어, 두 개의 목록이 있습니다.
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]))
이것은 며칠 전에 방금 요청되었지만 찾을 수 없습니다.
>>> 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).difference(subset_of_A)
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
반응형
'Development Tip' 카테고리의 다른 글
여러 dex 파일이 landroid / support / annotation / AnimRes를 정의합니다. (0) | 2020.12.06 |
---|---|
각도 재질 대화 상자 영역 외부를 클릭하여 대화 상자를 닫습니다 (Angular 버전 4.0 이상 사용). (0) | 2020.12.06 |
물 채우기 애니메이션 (0) | 2020.12.06 |
"On Error Resume Next"문은 무엇을합니까? (0) | 2020.12.06 |
div의 수직 정렬 이미지 (0) | 2020.12.06 |