Например, у меня есть два списка
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 для этого?
Например, у меня есть два списка
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 для этого?
Если порядок не важен, вы должны использовать 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]
Да, функция filter
:
filter(lambda x: x not in subset_of_A, A)
Нет, в python нет функции построения в python, потому что просто:
set(A)- set(subset_of_A)
предоставит вам ответ.
tuple(set([6, 7, 8, 9, 10, 11, 12]).difference([6, 9, 12]))
set(A)-set(subset_of_A)
дает ваш целевой набор результатов, но он не сохранит первоначальный порядок. Ниже приведен порядок сохранения:
[a for a in A if not a in 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
с самого начала, в зависимости от контекста. Затем вы можете использовать установить операции, как показывают другие ответы.
Однако преобразование списков в наборы и обратно только для этих операций медленнее, чем понимание списка.
Как насчет
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])
>>>