Jedinečný zoznam v Pythone - Ako získať všetky jedinečné hodnoty v zozname alebo v poli

Povedzme, že máte zoznam, ktorý obsahuje duplicitné čísla:

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

Ale chcete zoznam jedinečných čísel.

unique_numbers = [1, 2, 3, 4] 

Existuje niekoľko spôsobov, ako získať zoznam jedinečných hodnôt v Pythone. Tento článok vám ukáže, ako na to.

Možnosť 1 - Použitie súpravy na získanie jedinečných prvkov

Použitie setjeden spôsob, ako ísť na to. Sada je užitočná, pretože obsahuje jedinečné prvky.

Pomocou sady môžete získať jedinečné prvky. Potom sadu otočte do zoznamu.

Pozrime sa na dva prístupy, ktoré používajú množinu a zoznam. Prvý prístup je podrobný, ale je užitočné sledovať, čo sa deje, na každom kroku.

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] 

Pozrime sa bližšie na to, čo sa deje. Dostanem zoznam čísel numbers. Aj prejsť tento zoznam do funkcie get_unique_numbers.

Vo vnútri funkcie vytvorím prázdny zoznam, ktorý nakoniec bude obsahovať všetky jedinečné čísla. Potom pomocou a setzískam jedinečné čísla zo numberszoznamu.

unique_numbers = set(numbers) 

Mám, čo potrebujem: jedinečné čísla. Teraz potrebujem tieto hodnoty dostať do zoznamu. K tomu používam slučku for na iteráciu každého čísla v množine.

for number in unique_numbers: list_of_unique_numbers.append(number) 

Pri každej iterácii pridám do zoznamu aktuálne číslo list_of_unique_numbers. Nakoniec tento zoznam vrátim na konci programu.

Existuje kratší spôsob, ako použiť množinu a zoznam na získanie jedinečných hodnôt v Pythone. To je to, čo budeme riešiť ďalej.

Kratší prístup so súpravou

Celý kód napísaný vo vyššie uvedenom príklade možno zhustiť do jedného riadku pomocou zabudovaných funkcií Pythonu.

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

Aj keď tento kód vyzerá veľmi odlišne od prvého príkladu, myšlienka je rovnaká. Pomocou sady získate jedinečné čísla. Potom sadu otočte do zoznamu.

unique_numbers = list(set(numbers)) 

Pri čítaní vyššie uvedeného kódu je užitočné myslieť „naruby“. Najvnútornejšia kód dostane vyhodnotená ako prvý: set(numbers). Potom je vonkajšie kód sa vyhodnocuje: list(set(numbers)).

Možnosť 2 - Použitie iterácie na identifikáciu jedinečných hodnôt

Iterácia je ďalší prístup, ktorý je potrebné zvážiť.

Hlavnou myšlienkou je vytvoriť prázdny zoznam, ktorý bude obsahovať jedinečné čísla. Potom použite cyklus iterácie nad každým číslom v danom zozname. Ak je číslo už v jedinečnom zozname, pokračujte ďalšou iteráciou. V opačnom prípade k tomu pridajte číslo.

Pozrime sa na dva spôsoby, ako použiť iteráciu na získanie jedinečných hodnôt v zozname, počnúc verbálnejšou.

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] 

Tu sa deje na každom kroku. Najprv dostanem zoznam čísel numbers. Aj prejsť tento zoznam do svojej funkcie get_unique_numbers.

Vnútri funkcií, je možné vytvoriť prázdny zoznam unique. Nakoniec bude tento zoznam obsahovať všetky jedinečné čísla.

Na opakovanie každého čísla v numberszozname používam slučku for .

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

Podmienený vo vnútri cyklu skontroluje, či je v uniquezozname počet aktuálnych iterácií . Ak je to tak, slučka pokračuje do ďalšej iterácie. V opačnom prípade sa číslo pridá do tohto zoznamu.

Tu je dôležitý bod: pridajú sa iba jedinečné čísla. Keď je slučka dokončená, vrátim sa uniquea obsahuje všetky jedinečné čísla.

Kratší prístup s iteráciou

Existuje ďalší spôsob, ako zapísať funkciu do menšieho počtu riadkov.

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] 

Rozdiel je podmienený. Tentokrát je nastavená na toto čítanie: ak číslo nie je v unique, potom ho pridajte.

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

V opačnom prípade bude slučka sa bude pohybovať pozdĺž na ďalšie číslo v zozname numbers.

Výsledok je rovnaký. Niekedy je však ťažšie premýšľať a čítať kód, keď je boolovská hodnota negovaná.

Existujú aj iné spôsoby, ako nájsť jedinečné hodnoty v zozname Pythonu. Pravdepodobne však pravdepodobne narazíte na jeden z prístupov, ktorým sa venuje tento článok.

Píšem o učení sa programovaní a o najlepších spôsoboch, ako to dosiahnuť, na amymhaddad.com. Sledujte ma na Twitteri: @amymhaddad.