TL; DR:
SOLUSI (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`
SOLUSI (2) Anda menginginkan daftar yang diurutkan
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)
PENJELASAN:
(1) Anda dapat menggunakan NumPy ini setdiff1d( array1, array2, assume_unique= False).
assume_uniquememinta pengguna JIKA array SUDAH UNIK.
Jika False, maka elemen uniknya ditentukan terlebih dahulu.
Jika True, fungsi akan menganggap bahwa elemen tersebut sudah unik DAN fungsi akan melewatkan penentuan elemen unik.
Ini menghasilkan nilai unik array1yang tidak ada di dalamnyaarray2 . assume_uniqueadalah Falsesecara default.
Jika Anda khawatir dengan elemen unik (berdasarkan respons Chinny84 ), maka cukup gunakan (di mana assume_unique=False=> nilai default):
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)
Bagi mereka yang ingin jawaban diurutkan, saya telah membuat fungsi khusus:
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
Untuk mendapatkan jawabannya, jalankan:
main_list = setdiff_sorted(list_2,list_1)
CATATAN SAMPING:
(a) Solusi 2 (fungsi kustom setdiff_sorted) mengembalikan daftar (dibandingkan dengan array dalam solusi 1).
(b) Jika Anda tidak yakin apakah elemennya unik, cukup gunakan pengaturan default NumPy setdiff1ddi kedua solusi A dan B. Apa yang bisa menjadi contoh komplikasi? Lihat catatan (c).
(c) Hal-hal akan berbeda jika salah satu dari dua daftar tersebut tidak unik.
Katakanlah list_2tidak unik: list2 = ["a", "f", "c", "m", "m"]. Pertahankan list1apa adanya: list_1 = ["a", "b", "c", "d", "e"]
Menyetel nilai default assume_uniquehasil ["f", "m"](di kedua solusi). NAMUN, jika Anda menetapkan assume_unique=True, kedua solusi memberikan ["f", "m", "m"]. Mengapa? Ini karena pengguna MENGANGGAP bahwa elemennya unik). Karenanya, LEBIH BAIK UNTUK DIPERTAHANKANassume_uniqueke nilai defaultnya. Perhatikan bahwa kedua jawaban diurutkan.
pythonnumpy
list_2yang tidak muncul di tempatlist_1atau elemenlist_2yang tidak ada di indeks yang samalist_1?