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) Речі будуть різними, якщо жоден із двох списків не є унікальним.
Скажімо 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до значення за замовчуванням. Зауважте, що обидві відповіді сортовані.
пітононімілий
list_2які ніде не з’являються,list_1або елементиlist_2, які не мають того самого індексуlist_1?