Spuneți că aveți o listă care conține numere duplicate:

numbers = [1, 1, 2, 3, 3, 4]

Dar vrei o listă de unic numere.

unique_numbers = [1, 2, 3, 4]

Există câteva modalități de a obține o listă de valori unice în Python. Acest articol vă va arăta cum.

Opțiunea 1 – Utilizarea unui set pentru a obține elemente unice

Folosind un set o modalitate de a face acest lucru. Un set este util deoarece conține elemente unice.

Puteți utiliza un set pentru a obține elementele unice. Apoi, transformați setul într-o listă.

Să ne uităm la două abordări care folosesc un set și o listă. Prima abordare este detaliată, dar este util să vedeți ce se întâmplă la fiecare pas.

numbers = [1, 2, 2, 3, 3, 4, 5]


def get_unique_numbers(numbers):

    list_of_unique_numbers = []

    unique_numbers = set(numbers)

    for number in unique_numbers:
        list_of_unique_numbers.append(number)

    return list_of_unique_numbers


print(get_unique_numbers(numbers))
# result: [1, 2, 3, 4, 5]

Să aruncăm o privire mai atentă la ceea ce se întâmplă. Mi se oferă o listă de numere, numbers. Trec această listă în funcție, get_unique_numbers.

În interiorul funcției, creez o listă goală, care va păstra în cele din urmă toate numerele unice. Apoi, folosesc un set pentru a obține numerele unice din numbers listă.

unique_numbers = set(numbers)

Am ceea ce am nevoie: numerele unice. Acum trebuie să introduc aceste valori într-o listă. Pentru a face acest lucru, folosesc o buclă for pentru a itera prin fiecare număr din set.

for number in unique_numbers:
       list_of_unique_numbers.append(number)

La fiecare iterație adaug numărul curent la listă, list_of_unique_numbers. În cele din urmă, returnez această listă la sfârșitul programului.

Există o modalitate mai scurtă de a utiliza un set și o listă pentru a obține valori unice în Python. Asta vom aborda în continuare.

O abordare mai scurtă cu Set

Tot codul scris în exemplul de mai sus poate fi condensat într-o singură linie cu ajutorul funcțiilor încorporate ale Python.

numbers = [1, 2, 2, 3, 3, 4, 5]
unique_numbers = list(set(numbers))
print(unique_numbers)
# Result: [1, 2, 3, 4, 5]

Deși acest cod arată foarte diferit de primul exemplu, ideea este aceeași. Folosiți un set pentru a obține numerele unice. Apoi, transformați setul într-o listă.

unique_numbers = list(set(numbers))

Este util să vă gândiți „din afară” când citiți codul de mai sus. Primul cod este evaluat mai întâi: set(numbers). Apoi, codul cel mai exterior este evaluat: list(set(numbers)).

Opțiunea 2 – Utilizarea iterației pentru identificarea valorilor unice

Iterarea este o altă abordare de luat în considerare.

Ideea principală este să creați o listă goală care să conțină numere unice. Apoi, utilizați o iterație pentru buclă pentru fiecare număr din lista dată. Dacă numărul este deja în lista unică, continuați cu următoarea iterație. În caz contrar, adăugați numărul la acesta.

Să ne uităm la două moduri de a utiliza iterația pentru a obține valorile unice dintr-o listă, începând cu cea mai detaliată.

numbers = [20, 20, 30, 30, 40]


def get_unique_numbers(numbers):
    unique = []

    for number in numbers:
        if number in unique:
            continue
        else:
            unique.append(number)
    return unique


print(get_unique_numbers(numbers))
# Result: [20, 30, 40]

Iată ce se întâmplă la fiecare pas. Mai întâi, mi se oferă o listă de numere, numbers. Trec această listă în funcția mea, get_unique_numbers.

În interiorul funcției, creez o listă goală, unique. În cele din urmă, această listă va conține toate numerele unice.

Folosesc o buclă for pentru a itera prin fiecare număr din numbers listă.

 for number in numbers:
       if number in unique:
           continue
       else:
           unique.append(number)

Condiționalul din buclă verifică dacă numărul iterației curente este în unique listă. Dacă da, bucla continuă la următoarea iterație. În caz contrar, numărul se adaugă la această listă.

Iată punctul important: se adaugă doar numerele unice. Odată ce bucla este completă, atunci mă întorc unique care conține toate numerele unice.

O abordare mai scurtă cu iterație

Există o altă modalitate de a scrie funcția în mai puține rânduri.

numbers = [20, 20, 30, 30, 40]


def get_unique_numbers(numbers):
    unique = []
    for number in numbers:
        if number not in unique:
            unique.append(number)
    return unique
#Result: [20, 30, 40]

Diferența este condițională. De data aceasta este configurat să citească astfel: dacă numărul nu este în unique, apoi adăugați-l.

if number not in unique:
    unique.append(number)

În caz contrar, bucla se va deplasa la următorul număr din listă, numbers.

Rezultatul este același. Cu toate acestea, uneori este mai greu să te gândești și să citești codul atunci când booleanul este negat.

Există alte modalități de a găsi valori unice într-o listă Python. Dar probabil că vă veți găsi la una dintre abordările abordate în acest articol.

Scriu despre învățarea programării și despre cele mai bune modalități de a continua amymhaddad.com. Urmăriți-mă pe Twitter: @amymhaddad.