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?