Подтвердить что ты не робот

Фильтр массива в 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 

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

4b9b3361

Ответ 1

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

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

EDIT: Как говорит Делнан, производительность будет значительно улучшена, если subset_of_A является фактическим set, так как проверка принадлежности к a 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]

Ответ 2

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

filter(lambda x: x not in subset_of_A, A)

Ответ 3

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

set(A)- set(subset_of_A)

предоставит вам ответ.

Ответ 4

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

Ответ 5

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

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

Ответ 6

Это было просто задано пару дней назад (но я не могу найти его):

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

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

Ответ 7

Как насчет

set(A).difference(subset_of_A)

Ответ 8

Используйте тип 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

Ответ 9

>>> a = set([6, 7, 8, 9, 10, 11, 12])
>>> sub_a = set([6, 9, 12])
>>> a - sub_a
set([8, 10, 11, 7])

Ответ 10

>>> 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])
>>>