Bagean iki nerangake carane nggawe dhaptar anyar ing Python kanthi mbusak utawa ngekstrak unsur duplikat saka dhaptar (larik).
Rincian ing ngisor iki diterangake ing kene.
- Mbusak unsur duplikat lan nggawe dhaptar anyar
- Aja ngreksa urutan listing asli:
set()
- Ngreksa urutan listing asli:
dict.fromkeys()
,sorted()
- Array rong dimensi (dhaptar dhaptar)
- Aja ngreksa urutan listing asli:
- Ekstrak unsur duplikat lan gawe dhaptar anyar
- Aja ngreksa urutan listing asli
- Ngreksa urutan listing asli
- Array rong dimensi (dhaptar dhaptar)
Konsep sing padha bisa ditrapake kanggo tuple tinimbang dhaptar.
Waca artikel ing ngisor iki kanggo
- Yen sampeyan pengin nemtokake manawa dhaptar utawa tuple duwe unsur duplikat
- Yen sampeyan pengin ngekstrak unsur sing umum utawa ora umum ing pirang-pirang listing tinimbang siji listing
Elinga yen dhaptar bisa nyimpen macem-macem jinis data lan beda banget karo array. Yen sampeyan pengin nangani array ing pangolahan sing mbutuhake ukuran memori lan alamat memori utawa pangolahan numerik saka data gedhe, nggunakake array (perpustakaan standar) utawa NumPy.
Mbusak unsur duplikat lan nggawe dhaptar anyar
Aja ngreksa urutan listing asli:set()
Yen ana ora perlu kanggo ngreksa urutan saka dhaftar asli, nggunakake pesawat (), kang ngasilaken pesawat jinis pesawat.
Jinis set yaiku jinis data sing ora ana unsur duplikat. Nalika dhaftar utawa jinis data liyane liwati kanggo pesawat (), nilai duplikat digatèkaké lan obyek saka jinis pesawat bali kang mung nilai unik unsur.
Yen sampeyan pengin nggawe tuple, gunakake tuple ().
l = [3, 3, 2, 1, 5, 1, 4, 2, 3]
print(set(l))
# {1, 2, 3, 4, 5}
print(list(set(l)))
# [1, 2, 3, 4, 5]
Mesthi, bisa uga ditinggalake minangka disetel. Waca artikel ing ngisor iki kanggo informasi luwih lengkap babagan set jinis set.
Ngreksa urutan listing asli:dict.fromkeys(),sorted()
Yen sampeyan pengin ngreksa urutan dhaftar asli, nggunakake cara kelas fromkeys () saka jinis kamus utawa dibangun ing fungsi diurutake ().
dict.fromkeys () nggawe obyek kamus anyar kang tombol dhaftar, tuples, etc.. kasebut ing bantahan. Yen argumen kapindho diilangi, nilai kasebut Ora Ana.
Wiwit tombol kamus ora duwe unsur duplikat, nilai duplikat digatèkaké ing set (). Kajaba iku, obyek kamus bisa liwati minangka argumentasi kanggo dhaptar () kanggo entuk dhaptar sing unsur minangka tombol kamus.
print(dict.fromkeys(l))
# {3: None, 2: None, 1: None, 5: None, 4: None}
print(list(dict.fromkeys(l)))
# [3, 2, 1, 5, 4]
Iku wis dijamin wiwit Python 3.7 (CPython punika 3.6) sing dict.fromkeys () ngreksa urutan saka pitakonan. Versi sadurungé nggunakake dibangun ing fungsi diurutake () minangka nderek.
Nemtokake dhaptar indeks metode tuple () kanggo kunci argumen sing diurutake, sing ngasilake dhaptar unsur sing diurutake.
indeks () iku cara sing ngasilake indeks saka Nilai (nomer saka unsur ing dhaftar), kang bisa kasebut minangka tombol diurutake () kanggo ngurutake dhaftar adhedhasar urutan dhaftar asli. Tombol argumen kasebut minangka obyek sing bisa diarani (callable), mula aja nulis ().
print(sorted(set(l), key=l.index))
# [3, 2, 1, 5, 4]
Array rong dimensi (dhaptar dhaptar)
Kanggo susunan rong dimensi (dhaptar dhaptar), cara nggunakake set () utawa dict.fromkeys () ngasilake TypeError.
l_2d = [[1, 1], [0, 1], [0, 1], [0, 0], [1, 0], [1, 1], [1, 1]]
# l_2d_unique = list(set(l_2d))
# TypeError: unhashable type: 'list'
# l_2d_unique_order = dict.fromkeys(l_2d)
# TypeError: unhashable type: 'list'
Iki amarga obyek non-hashable kayata dhaptar ora bisa dadi unsur saka jinis set utawa tombol saka jinis dict.
Temtokake fungsi ing ngisor iki Urutan dhaptar asli disimpen lan bisa digunakake kanggo dhaptar lan tuple siji-dimensi.
def get_unique_list(seq):
seen = []
return [x for x in seq if x not in seen and not seen.append(x)]
print(get_unique_list(l_2d))
# [[1, 1], [0, 1], [0, 0], [1, 0]]
print(get_unique_list(l))
# [3, 2, 1, 5, 4]
Notasi pangerten dhaptar digunakake.
Ing kene, kita nggunakake ing ngisor iki
- Yen X ing “X lan Y” salah ing evaluasi short-circuit operator lan, banjur Y ora dievaluasi (ora kaleksanan).
- Metode append () ngasilake Ora Ana.
Yen unsur seq dhaftar asli ora ana ing katon, banjur lan sawise dievaluasi.
seen.append (x) dieksekusi lan unsur ditambahake kanggo katon.
Amarga cara append () ngasilake Ora Ana lan Ora Ana Palsu, ora katon.append (x) ngevaluasi Bener.
Ekspresi kondisional ing notasi pangerten dhaptar dadi Bener lan ditambahake minangka unsur dhaptar pungkasan sing digawe.
Yen unsur seq dhaptar asli ana ing katon, banjur x ora katon iku Palsu, lan ekspresi kondisional kanggo ekspresi pangerten dhaptar iku Palsu.
Mulane, padha ora ditambahake minangka unsur saka dhaftar kui final.
Cara liya kanggo nyetel sumbu argumen ing fungsi NumPy np.unique (), sanajan asil bakal diurutake.
Ekstrak unsur duplikat lan gawe dhaptar anyar
Aja ngreksa urutan listing asli
Kanggo extract mung duplikat unsur saka dhaftar asli, nggunakake collections.Counter ().
Ngasilake koleksi. Counter (subkelas kamus) kanthi unsur minangka kunci lan jumlah unsur minangka nilai.
import collections
l = [3, 3, 2, 1, 5, 1, 4, 2, 3]
print(collections.Counter(l))
# Counter({3: 3, 2: 2, 1: 2, 5: 1, 4: 1})
Awit iku subclass saka kamus, item () bisa digunakake kanggo njupuk tombol lan nilai. Iku cukup kanggo extract tombol kang nomer loro utawa luwih.
print([k for k, v in collections.Counter(l).items() if v > 1])
# [3, 2, 1]
Ngreksa urutan listing asli
Kaya sing ditampilake ing conto ing ndhuwur, wiwit Python 3.7, tombol koleksi.Counter nahan urutan dhaptar asli lan liya-liyane.
Ing versi sadurungé, ngurutake karo sorted () cukup, minangka mbusak unsur duplikat.
print(sorted([k for k, v in collections.Counter(l).items() if v > 1], key=l.index))
# [3, 2, 1]
Yen sampeyan pengin ngekstrak duplikat kaya saiki, tinggalake unsur saka dhaptar asli kanthi jumlah loro utawa luwih. Urutan uga dilestarekake.
cc = collections.Counter(l)
print([x for x in l if cc[x] > 1])
# [3, 3, 2, 1, 1, 2, 3]
Array rong dimensi (dhaptar dhaptar)
Kanggo susunan rong dimensi (dhaptar dhaptar), fungsi ing ngisor iki bisa ditindakake nalika urutan dhaptar asli ora disimpen lan nalika disimpen. Uga dianggo kanggo dhaptar siji-dimensi lan tuple.
l_2d = [[1, 1], [0, 1], [0, 1], [0, 0], [1, 0], [1, 1], [1, 1]]
def get_duplicate_list(seq):
seen = []
return [x for x in seq if not seen.append(x) and seen.count(x) == 2]
def get_duplicate_list_order(seq):
seen = []
return [x for x in seq if seq.count(x) > 1 and not seen.append(x) and seen.count(x) == 1]
print(get_duplicate_list(l_2d))
# [[0, 1], [1, 1]]
print(get_duplicate_list_order(l_2d))
# [[1, 1], [0, 1]]
print(get_duplicate_list(l))
# [3, 1, 2]
print(get_duplicate_list_order(l))
# [3, 2, 1]
Yen sampeyan pengin ngekstrak nganggo duplikat, tinggalake unsur saka dhaptar asli kanthi cacah loro utawa luwih.
print([x for x in l_2d if l_2d.count(x) > 1])
# [[1, 1], [0, 1], [0, 1], [1, 1], [1, 1]]
Elinga yen wiwit kerumitan komputasi count () O (n), fungsi ditampilake ing ndhuwur sing bola-bali nglakokaké count () banget ora efisien. Bisa uga ana cara sing luwih pinter.
Counter punika subclass saka kamus, supaya yen sampeyan pass dhaftar utawa tuple unsur sing dhaftar utawa obyek non-hashable liyane kanggo collections.Counter (), bakal ana kesalahan lan sampeyan ora bisa nggunakake.
# print(collections.Counter(l_2d))
# TypeError: unhashable type: 'list'