TL; DR:
РЕШЕНИЕ (1)
import numpy as np
main_list = np.setdiff1d(list_2,list_1)
# yields the elements in `list_2` that are NOT in `list_1`
РЕШЕНИЕ (2) Вам нужен отсортированный список
def setdiff_sorted(array1,array2,assume_unique=False):
ans = np.setdiff1d(array1,array2,assume_unique).tolist()
if assume_unique:
return sorted(ans)
return ans
main_list = setdiff_sorted(list_2,list_1)
ПОЯСНЕНИЕ:
(1) Вы можете использовать NumPy - х setdiff1d
( array1
, array2
, assume_unique
= False
).
assume_unique
спрашивает пользователя, УЖЕ УНИКАЛЬНЫЕ массивы.
Если False
, то сначала определяются уникальные элементы.
Если True
функция будет считать, что элементы уже уникальны, и функция пропустит определение уникальных элементов.
Это дает уникальные значения array1
, которых нет в array2
. assume_unique
это False
по умолчанию.
Если вас интересуют уникальные элементы (на основе ответа Chinny84 ), просто используйте (где assume_unique=False
=> значение по умолчанию):
import numpy as np
list_1 = ["a", "b", "c", "d", "e"]
list_2 = ["a", "f", "c", "m"]
main_list = np.setdiff1d(list_2,list_1)
# yields the elements in `list_2` that are NOT in `list_1`
(2)
Для тех, кто хочет отсортировать ответы, я создал специальную функцию:
import numpy as np
def setdiff_sorted(array1,array2,assume_unique=False):
ans = np.setdiff1d(array1,array2,assume_unique).tolist()
if assume_unique:
return sorted(ans)
return ans
Чтобы получить ответ, запустите:
main_list = setdiff_sorted(list_2,list_1)
ПОБОЧНЫЕ ЗАМЕЧАНИЯ:
(a) Решение 2 (пользовательская функция setdiff_sorted
) возвращает список (по сравнению с массивом в решении 1).
(b) Если вы не уверены, уникальны ли элементы, просто используйте настройку NumPy по умолчанию setdiff1d
в обоих решениях A и B. Что может быть примером сложности? См. Примечание (c).
(c) Все будет по-другому, если любой из двух списков не уникален.
Скажем list_2
не уникальна: list2 = ["a", "f", "c", "m", "m"]
. Сохранить list1
как есть: list_1 = ["a", "b", "c", "d", "e"]
установка значения assume_unique
урожайности по умолчанию ["f", "m"]
(в обоих решениях). ОДНАКО, если вы установите assume_unique=True
, оба решения дают ["f", "m", "m"]
. Зачем? Это потому, что пользователь ПРЕДПОЛОЖИЛ, что элементы уникальны). Значит, ЛУЧШЕ СОХРАНИТЬassume_unique
значение по умолчанию. Обратите внимание, что оба ответа отсортированы.
питонNumPy
list_2
которые нигде не появляются,list_1
или элементыlist_2
, которых нет в том же индексеlist_1
?