예를 들어, 두 개의 목록이 있습니다.
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)
filter
목록 자체를 반환하고 Python 3에서는 반복자를 반환합니다.
list(filter(...))
이것은 며칠 전에 요청되었지만 찾을 수 없습니다.
>>> 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 를 사용하는 것이 더 나을 수 있습니다 . 그런 다음 집합 작업을 사용할 수 있습니다. 다른 답변과 같은 .
그러나 이러한 작업에 대해서만 목록을 집합으로 변환하고 다시 되 돌리는 것은 목록 이해보다 느립니다.
subset_of_A
하는 real 을 만들면 크게 향상 될 수 있습니다 ( 목록 대신 ).set
O(1)
O(n)