фильтр массива в питоне? - PullRequest
       16

фильтр массива в питоне?

57 голосов
/ 12 апреля 2011

Например, у меня есть два списка

 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 

Есть ли в python встроенная функция для этого?

Ответы [ 10 ]

83 голосов
/ 12 апреля 2011

Если заказ не важен, вы должны использовать set.difference.Однако, если вы хотите сохранить порядок, достаточно всего лишь простого понимания списка.

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

РЕДАКТИРОВАТЬ: Как говорит Делнан, производительность будет существенно улучшена, если subset_of_Aфактический set, поскольку проверка на членство в set - это O (1) по сравнению с O (n) для списка.

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]
43 голосов
/ 12 апреля 2011

Да, функция filter:

filter(lambda x: x not in subset_of_A, A)
6 голосов
/ 12 апреля 2011

Нет, в python нет встроенной функции для этого, потому что просто:

set(A)- set(subset_of_A)

даст вам ответ.

6 голосов
/ 12 апреля 2011

set(A)-set(subset_of_A) дает ожидаемый набор результатов, но не сохраняет первоначальный порядок. Следующее сохраняет порядок:

[a for a in A if not a in subset_of_A]
5 голосов
/ 12 апреля 2011

tuple(set([6, 7, 8, 9, 10, 11, 12]).difference([6, 9, 12]))

3 голосов
/ 12 апреля 2011

Об этом только что спросили пару дней назад (но я не могу его найти):

>>> 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 с самого начала, в зависимости от контекста.Затем вы можете использовать операции набора , как показывают другие ответы.

Однако преобразование списков в наборы и обратно только для этих операций медленнее, чем их понимание.

2 голосов
/ 12 апреля 2011

Используйте тип 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
2 голосов
/ 12 апреля 2011

Как насчет

set(A).difference(subset_of_A)
1 голос
/ 12 апреля 2011
>>> 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])
>>> 
1 голос
/ 12 апреля 2011
>>> a = set([6, 7, 8, 9, 10, 11, 12])
>>> sub_a = set([6, 9, 12])
>>> a - sub_a
set([8, 10, 11, 7])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...