Përcaktimi nëse një listë (array) ka elementë dublikatë në Python

biznes

Më poshtë është një përshkrim se si të përcaktohet nëse një listë (array) ka elemente të dyfishta (të gjithë elementët janë unikë/unikë) në Python, për secilin nga rastet e mëposhtme.

  • Për një listë pa listë në element
  • Për listat me lista elementësh (vargje dydimensionale, lista listash, etj.)

Shihni artikullin vijues se si të hiqni ose nxirrni elementë të dyfishtë nga një listë.

Vini re se listat mund të ruajnë lloje të ndryshme të dhënash dhe janë rreptësisht të ndryshme nga grupet. Nëse dëshironi të trajtoni vargje në procese që kërkojnë madhësinë e memories dhe adresat e memories ose përpunimin numerik të të dhënave të mëdha, përdorni grup (bibliotekë standarde) ose NumPy.

Përcaktoni nëse ka elementë dublikatë në listë (nëse elementi nuk ka listë)

Nëse elementi nuk ka një objekt të përditësueshëm si një listë, përdorni konstruktorin set() të llojit të grupit.

Lloji i grupit është një lloj i të dhënave që nuk ka elemente të dyfishta. Kur një listë i kalohet grupit të konstruktorit (), vlerat e kopjuara shpërfillen dhe kthehet një objekt i tipit të vendosur me vetëm vlera unike si elementë.

Numri i elementeve në këtë objekt të tipit grup dhe lista origjinale merren dhe krahasohen duke përdorur funksionin e integruar len().

  • Nëse numri i elementeve është i barabartë, nuk ka elemente të dyfishta në listën origjinale
  • Elementet dublikatë përfshihen në listën origjinale nëse numri i elementeve është i ndryshëm

Funksionet që kthejnë false nëse nuk ka elementë dublikatë dhe true nëse ka elementë dublikatë janë si më poshtë

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

Shembulli është një listë, por i njëjti funksion mund të përdoret me tuples.

Objektet e ndryshueshme (të përditësueshme) si listat nuk mund të jenë elementë të grupit të tipit. Prandaj, listat me lista si elemente (vargje dydimensionale, lista listash, etj.) do të rezultojnë në një gabim të tipit. Kundërmasa është paraqitur më poshtë.

l_2d = [[0, 1], [1, 1], [0, 1], [1, 0]]
# print(has_duplicates(l_2d))
# TypeError: unhashable type: 'list'

Përcaktoni nëse ka elementë dublikatë në listë (nëse elementi ka një listë)

Në rastin e një liste me një listë elementësh (siç është një listë me lista), funksionet e mëposhtme mund të përdoren për të përcaktuar nëse ka elementë të dyfishtë.

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

Në vend të set(), shënimi i kuptimit të listës gjeneron një listë, elementët e së cilës janë vetëm vlera unike, dhe numri i elementeve krahasohet. Shihni artikullin e mëposhtëm për detaje.

Ky funksion është gjithashtu i vlefshëm për listat që nuk kanë një listë elementesh.

l = [0, 1, 2]
print(has_duplicates2(l))
# False

l = [0, 1, 1, 2]
print(has_duplicates2(l))
# True

Shembulli i deritanishëm është përcaktimi nëse lista e elementeve është e dyfishuar (përmban të njëjtën listë).

Nëse elementet e secilës listë mbivendosen mund të përcaktohet pasi të rrafshohet lista origjinale në një dimension.

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

Këtu, sum() përdoret për të rrafshuar listën, por mund të përdoret gjithashtu itertools.chain.from_iterable(). Përveç kësaj, kur rrafshoni një listë me tre ose më shumë dimensione, është e nevojshme të përcaktohet një funksion i ri.

Copied title and URL