Pythoni ainulaadne loend - kuidas saada nimekirja või massiivi kõik unikaalsed väärtused

Oletame, et teil on duplikaatnumbreid sisaldav loend:

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

Kuid soovite unikaalsete numbrite loendit .

unique_numbers = [1, 2, 3, 4] 

Pythonis on paar võimalust unikaalsete väärtuste loendi saamiseks. See artikkel näitab teile, kuidas.

1. võimalus - unikaalsete elementide hankimiseks komplekti kasutamine

Kasutades setühte viisi selle saavutamiseks. Komplekt on kasulik, kuna see sisaldab unikaalseid elemente.

Unikaalsete elementide saamiseks võite kasutada komplekti. Seejärel muutke komplekt loendiks.

Vaatame kahte lähenemist, mis kasutavad komplekti ja loendit. Esimene lähenemisviis on mitmekülgne, kuid on kasulik näha, mis igal sammul toimub.

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] 

Vaatame lähemalt, mis toimub. Mind antud numbrite loendi, numbers. Annan selle loendi funktsiooni get_unique_numbers.

Funktsiooni sees koostan tühja loendi, kuhu mahuvad lõpuks kõik kordumatud numbrid. Seejärel kasutan loendist setainulaadsete numbrite saamiseks a numbers.

unique_numbers = set(numbers) 

Mul on olemas see, mida ma vajan: kordumatud numbrid. Nüüd pean need väärtused loendisse tooma. Selleks kasutan hulga iga numbri iteratsiooniks for for loopi.

for number in unique_numbers: list_of_unique_numbers.append(number) 

Iga iteratsiooni lisan praeguse arvu nimekirja, list_of_unique_numbers. Lõpuks tagastan selle loendi programmi lõpus.

Pythonis ainulaadsete väärtuste saamiseks on komplekti ja loendi kasutamiseks lühem viis. Sellega tegeleme edasi.

Lühem lähenemine komplektiga

Kogu ülaltoodud näites kirjutatud koodi saab Pythoni sisseehitatud funktsioonide abil kokku koondada ühele reale.

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

Kuigi see kood näeb esimesest näitest väga erinev välja, on idee sama. Unikaalsete numbrite saamiseks kasutage komplekti. Seejärel muutke komplekt loendiks.

unique_numbers = list(set(numbers)) 

Kasulik on ülaltoodud koodi lugedes mõelda "tagurpidi". Kõige sisemine kood saab hinnata esimese: set(numbers). Siis perifeersemad koodi hinnatakse: list(set(numbers)).

Variant 2 - korduste kasutamine kordumatute väärtuste tuvastamiseks

Iteratsioon on teine ​​lähenemisviis, mida tuleb arvestada.

Peamine mõte on luua tühi loend, kuhu mahuksid unikaalsed numbrid. Seejärel kasutage a tsükli kordamiseks antud loendis iga numbri kohal. Kui number on juba ainulaadses loendis, jätkake järgmise iteratsiooniga. Muul juhul lisage sellele number.

Vaatame kaht viisi iteratsiooni kasutamiseks unikaalsete väärtuste loendisse saamiseks, alustades täpsemast.

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] 

Igal sammul toimub järgmine. Esiteks ma antud numbrite loendi, numbers. Annan selle loendi mu funktsiooni get_unique_numbers.

Funktsiooni sees koostan tühja loendi unique. Lõpuks on selles loendis kõik unikaalsed numbrid.

numbersLoendi iga numbri kordamiseks kasutan a for loopi .

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

Tingimus tsükli sees kontrollib, kas praeguse iteratsiooni number on uniqueloendis. Kui jah, jätkub tsükkel järgmise iteratsioonini. Vastasel juhul lisatakse number sellesse loendisse.

Siin on oluline punkt: lisatakse ainult kordumatud numbrid. Kui tsükkel on lõpule jõudnud, pöördun tagasi, uniquemis sisaldab kõiki kordumatuid numbreid.

Lühem lähenemine kordusega

On veel üks võimalus funktsiooni kirjutada vähem ridadesse.

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] 

Erinevus on tinglik. Seekord on see seadistatud lugema nii: kui numbrit pole sees unique, siis lisage see.

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

Vastasel korral loop liigub mööda järgmine number loendis numbers.

Tulemus on sama. Siiski on mõnikord raskem koodi üle mõelda ja seda lugeda, kui boolean tühistatakse.

Pythoni loendis on muid võimalusi unikaalsete väärtuste leidmiseks. Kuid tõenäoliselt avastate end selles artiklis käsitletud lähenemisviisidest.

Kirjutan programmeerimise õppimisest ja parimatest viisidest selle saavutamiseks saidil amymhaddad.com. Jälgi mind Twitteris: @amymhaddad.