Ing ngisor iki minangka katrangan babagan carane nemtokake manawa dhaptar (array) nduweni unsur duplikat (kabeh unsur unik / unik) ing Python, kanggo saben kasus ing ngisor iki.
- Kanggo dhaptar tanpa dhaptar ing unsur
- Kanggo dhaptar kanthi dhaptar unsur (array rong dimensi, dhaptar dhaptar, lsp.)
Deleng artikel ing ngisor iki babagan carane mbusak utawa ngekstrak unsur duplikat saka dhaptar.
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.
Temtokake manawa ana unsur duplikat ing dhaptar (yen unsur kasebut ora ana dhaptar)
Yen unsur ora duwe obyek nganyari kayata dhaftar, nggunakake konstruktor pesawat () saka jinis pesawat.
Jinis set yaiku jinis data sing ora ana unsur duplikat. Nalika dhaftar wis liwati kanggo pesawat konstruktor (), nilai duplikat digatèkaké lan obyek saka jinis pesawat karo mung nilai unik minangka unsur bali.
Jumlah unsur ing obyek jinis pesawat iki lan dhaftar asli dijupuk lan dibandhingake nggunakake dibangun ing fungsi len ().
- Yen jumlah unsur padha, ora ana unsur duplikat ing dhaptar asli
- Unsur duplikat kalebu ing dhaptar asli yen jumlah unsur beda
Fungsi sing ngasilake false yen ora ana unsur duplikat lan bener yen ana unsur duplikat kaya ing ngisor iki
def has_duplicates(seq):
return len(seq) != len(set(seq))
l = [0, 1, 2]
print(has_duplicates(l))
# False
l = [0, 1, 1, 2]
print(has_duplicates(l))
# True
Contone, dhaptar, nanging fungsi sing padha bisa digunakake karo tuple.
Obyek sing bisa diganti (bisa dianyari) kayata dhaptar ora bisa dadi unsur saka jinis set. Mulane, dhaptar kanthi dhaptar minangka unsur (array rong dimensi, dhaptar dhaptar, lsp.) bakal nyebabake TypeError. Countmeasure kapacak ing ngisor iki.
l_2d = [[0, 1], [1, 1], [0, 1], [1, 0]]
# print(has_duplicates(l_2d))
# TypeError: unhashable type: 'list'
Nemtokake manawa ana unsur duplikat ing dhaptar (yen unsur kasebut duwe dhaptar)
Ing kasus dhaptar kanthi dhaptar unsur (kayata dhaptar dhaptar), fungsi ing ngisor iki bisa digunakake kanggo nemtokake manawa ana unsur duplikat.
def has_duplicates2(seq):
seen = []
unique_list = [x for x in seq if x not in seen and not seen.append(x)]
return len(seq) != len(unique_list)
l_2d = [[0, 0], [0, 1], [1, 1], [1, 0]]
print(has_duplicates2(l_2d))
# False
l_2d = [[0, 0], [0, 1], [1, 1], [1, 1]]
print(has_duplicates2(l_2d))
# True
Tinimbang pesawat (), ing dhaftar pangerten notasi ngasilake dhaftar kang unsur mung nilai unik, lan nomer unsur dibandhingake. Deleng artikel ing ngisor iki kanggo rincian.
Fungsi iki uga bener kanggo dhaptar sing ora duwe dhaptar unsur.
l = [0, 1, 2]
print(has_duplicates2(l))
# False
l = [0, 1, 1, 2]
print(has_duplicates2(l))
# True
Conto nganti saiki yaiku nemtokake manawa dhaptar unsur kasebut diduplikasi (ngemot dhaptar sing padha).
Apa unsur saben dhaptar tumpang tindih bisa ditemtokake sawise flattening dhaftar asli kanggo siji dimensi.
l_2d = [[0, 1], [2, 3]]
print(sum(l_2d, []))
# [0, 1, 2, 3]
print(has_duplicates(sum(l_2d, [])))
# False
l_2d = [[0, 1], [2, 0]]
print(has_duplicates(sum(l_2d, [])))
# True
Kene, sum () digunakake kanggo flatten dhaftar, nanging itertools.chain.from_iterable () uga bisa digunakake. Kajaba iku, nalika flattening dhaftar telung utawa luwih dimensi, iku perlu kanggo netepake fungsi anyar.