Listat (luettelo). Listaa funktiot ja menetelmät

15.05.2022

Tänään puhun tietotyypistä, kuten luetteloita, niiden toiminnot ja menetelmät, listageneraattoreista ja listojen käytöstä.

Mitä listat ovat?

Pythonin listat ovat järjestettyjä, muuttuvia objektikokoelmia mielivaltaisista tyypeistä (kuten taulukko, mutta tyypit voivat vaihdella).

Jos haluat käyttää luetteloita, sinun on luotava ne. Luettelon luomiseen on useita tapoja. Voit esimerkiksi käsitellä mitä tahansa iteroitavaa objektia (esimerkiksi ) sisäänrakennetulla toiminnolla lista:

>>> lista ("lista") ["lista"]

Voit myös luoda luettelon käyttämällä literaalia:

>>> s = # Tyhjä lista >>> l = [ "s" , "p" , [ "isok" ], 2 ] >>> s >>> l ["s", "p", ["isok" "], 2]

Kuten esimerkistä näet, luettelo voi sisältää minkä tahansa määrän mitä tahansa objekteja (mukaan lukien sisäkkäiset luettelot) tai se voi sisältää mitään.

Ja toinen tapa luoda luettelo on listageneraattoreita. Listageneraattori on tapa rakentaa uusi lista käyttämällä lauseketta jokaiseen sekvenssin elementtiin. Listageneraattorit ovat hyvin samankaltaisia ​​kuin silmukka.

>>> c = [ c * 3 c:lle "luettelossa" ] >>> c ["lll", "iii", "sss", "ttt"]

Monimutkaisempi listageneraattori on myös mahdollista:

>>> c = [ c * 3 c:lle "luettelossa", jos c != "i" ] >>> c ["lll", "sss", "ttt"] >>> c = [ c + d c "luettelossa", jos c != "i" d:lle "roskapostissa", jos d != "a" ] >>> c ["ls", "lp", "lm", "ss", "sp", "sm", "ts", "tp", "tm"]

Mutta monimutkaisissa tapauksissa on parempi käyttää tavallista for-silmukkaa luetteloiden luomiseen.

Listaa funktiot ja menetelmät

Luo luotu, nyt sinun täytyy tehdä jotain luettelon kanssa. Perus- ja luettelomenetelmät ovat saatavilla luetteloille.

Taulukko "Lista menetelmät"

MenetelmäMitä hän tekee
list.append(x)Lisää elementin luettelon loppuun
list.extend(L)Laajentaa luetteloa liittämällä kaikki listan L elementit
list.insert(i, x)Lisää arvon x i. elementtiin
list.remove(x)Poistaa luettelosta ensimmäisen elementin, jolla on arvo x. ValueError, jos tällaista elementtiä ei ole
lista.pop([i])Poistaa i:nnen elementin ja palauttaa sen. Jos indeksiä ei ole määritetty, viimeinen elementti poistetaan
lista.indeksi(x, ])Palauttaa ensimmäisen elementin sijainnin arvolla x (haku alusta loppuun)
list.count(x)Palauttaa elementtien määrän, joiden arvo on x
list.sort() Lajittelee luettelon funktion perusteella
lista.käänteinen() Laajentaa luetteloa
lista.kopio() Matala kopio luettelosta
lista.selkeä() Tyhjentää luettelon

On huomattava, että listamenetelmät, toisin kuin , muokkaavat itse listaa, joten suoritustulosta ei tarvitse kirjoittaa tähän muuttujaan.

>>> l = [ 1 , 2 , 3 , 5 , 7 ] >>> l . sort() >>> l >>> l = l . sort() >>> print(l) Ei mitään

Ja lopuksi esimerkkejä luetteloiden kanssa työskentelystä:

>>> a = [ 66.25 , 333 , 333 , 1 , 1234.5 ] >>> tulosta ( a. count ( 333 ), a. count ( 66.25 ), a. count ( "x" )) 2 1 0 >>> a. lisää (2 , - 1 ) >>> a . liitä (333 ) >>> a >>> a. indeksi (333 ) 1 >>> a . poista (333 ) >>> a >>> a. käänteinen() >>>a >>> a. sort() >>> a [-1, 1, 66.25, 333, 333, 1234.5]

Joskus tuottavuuden lisäämiseksi luettelot korvataan paljon vähemmän joustavilla

Kuvitellaan tilanne - sinun täytyy purkaa kaikki luettelon elementit ja määrittää jokainen niistä omaan muuttujaansa. Meillä on esimerkiksi luettelo, joka kuvaa henkilöä ja sisältää seuraavat elementit:

Person_data = ["John", "Smith", 23, "ohjelmoija"]

Käyttäjänimi, käyttäjän_sukunimi, käyttäjän_ikä, käyttäjän_ammatti = henkilö_tiedot

Tämän jälkeen voimme käyttää jokaista luotua muuttujaa erikseen.

Huomaa, että luotujen muuttujien määrän on vastattava luettelon elementtien määrää, muuten saat virheilmoituksen.

Kuinka käyttää generaattoreita Pythonissa.

Listaa generaattorit Pythonissa kutsutaan yksirivisiksi rakenteiksi, joiden avulla voit luoda uusia luetteloita.

Luettelogeneraattoreiden syntaksi on:

# yksinkertaisin generaattori new_list =

Tämän seurauksena new_list sisältää numeroita 0 - 9. On selvää, että tällaisen listan luomiseen ei tarvitse käyttää generaattoria. Sinun tarvitsee vain käyttää range()-funktiota

# monimutkaisempi esimerkkisana = "hei" new_list =

Nyt new_list näyttää tältä:

["Hei"]

Voit myös lisätä if-rakenteen luettelogeneraattoreihin:

# Luo luettelo luvuista, jotka ovat kolmen new_list =:n kerrannaisia

Tuloksena saamme:

Lopuksi voit käyttää generaattorissa useita luetteloita ja muuttujia:

# korttipakan luominen listageneraattorilla # puvut puvut = "HDCS" # sijoittuu riveihin = "23456789TJQKA" # korttipakan luominen =

Saamme seuraavan tuloksen:

Kuvittele kuinka paljon aikaa säästimme kirjoittamalla vain yhden rivin useiden silmukoiden sijaan.

Kuinka purkaa elementtejä Pythonin aliluetteloista.

Usein syntyy myös tilanne, kun on tarpeen poimia elementtejä listan aliluetteloista.

Meillä on esimerkiksi seuraava luettelo:

Ulompi = [, , ]

Tehtävänä on luoda erillinen lista, joka sisältää kaikki aliluetteloiden elementit tästä luettelosta. Voit suorittaa tämän tehtävän käyttämällä samaa luettelogeneraattoria:

Uusi_lista =

Siten saamme luettelon kaikista elementeistä:

Siinä kaikki tältä päivältä. Onnea oppimiseen Python!

| |

Listan ymmärtämisen avulla voit luoda nopeasti luettelon olemassa olevista luetteloista. Generaattorin avulla voit luoda luettelon minkä tahansa iteroitavan tietotyypin (esimerkiksi merkkijonojen tai monikoiden) perusteella.

Tämän seurauksena silmukka luo saman luettelon:

["8", "h", "o", "s", "t"]

Ehdolliset lausekkeet luettelogeneraattoreissa

Luettelogeneraattorit voivat käyttää ehdollisia lausekkeita olemassa olevien luetteloiden tai muiden peräkkäisten tietotyyppien muokkaamiseen, jolloin saadaan uusi luettelo.

Katsotaan generaattoria if-lauseella:

fish_tuple = ("blowfish", "clowfish", "monni", "mustekala")
fish_list =
tulosta (kalaluettelo)

Lista käyttää fish_tuple monikkoa uuden fish_list perustana.

For- ja in-avainsanoja käytetään samalla tavalla kuin edellisessä koossa. Lisäksi generaattori sisältää if-käskyn, joka saa sen jättämään pois luettelosta merkkijonon 'octopus'.

Tee kysely fish_list:n sisällöstä ja varmista, että se sisältää kaikki fish_tuple-elementit paitsi 'octopus'.

["blowfish", "clowfish", "monni"]

Kuten näet, ehdollista lauseketta käyttämällä voit jättää tietyn elementin pois uudesta luettelosta.

Katsotaan nyt toista esimerkkiä, joka käyttää matemaattisia operaatioita, numeroita ja range()-menetelmää.


tulosta (numeroluettelo)

Lue myös:

Uusi number_list sisältää kunkin parillisen elementin neliöarvot välillä 0-9. Tuloksena tulee tällainen luettelo:

Katsotaanpa tätä esimerkkiä vaihe vaiheelta. Jos x:n x ** 2 sijaan käytämme vain x:ää x:lle, luettelo näyttää tältä:

numero_lista =
tulosta (numeroluettelo)

Tämän jälkeen generaattoriin lisättiin ehdollinen lauseke:

numero_lista =
tulosta (numeroluettelo)

If-lause poisti kaikki parittomat luvut luettelosta.

Nyt ei jää enää muuta kuin lisätä operaattori, joka neliöttää kaikki elementit:

numero_lista =
tulosta (numeroluettelo)

Nyt jokainen luettelon elementti on neliöity.

Voit myös käyttää sisäkkäisiä if-lauseita generaattoreissa:

numero_lista =
tulosta (numeroluettelo)

Python-ohjelmointikielen luettelogeneraattorit ovat tehokas työkalu erilaisten tietojoukkojen käsittelyyn. Useimmiten näitä rakenteita käytetään kätevämpään vuorovaikutukseen luetteloiden kanssa, mikä tarjoaa paitsi niiden luomisen myös muokkaamisen. Huolimatta siitä, että joissakin tapauksissa voit tehdä ilman generaattoreita, niiden oikea käyttö yksinkertaistaa huomattavasti monimutkaisten algoritmien toteuttamista.

Yksinkertainen sukupolvi

Eniten yksinkertaisella tavalla luominen on tavanomainen tarvittavien arvojen tai objektien osoittaminen sille. Jos sekvenssissä on vähän elementtejä, ne voidaan yksinkertaisesti luetella peräkkäin. Mutta jos niiden määrä ylittää tusinan, sinun tulee vakavasti harkita luettelogeneraattorin käyttöä. Tämä rakenne varmistaa sen automaattisen täytön tiettyjen ohjeiden mukaan.

Seuraava esimerkki näyttää kuinka luodaan numeroluettelo Pythonin generaattorilla. Muuttuja i on viittaus tietoobjektin nykyiseen elementtiin. Aluefunktio käyttää tässä kaksi argumenttia, jotka asettavat rajat generoidulle kokonaislukusarjalle. Tiedot näytetään näytöllä tulostusmenetelmällä.

>>> tiedot = >>> tulosta (data)

Python 3 -luettelogeneraattorit eivät toimi vain numeeristen arvojen kanssa. Kuten seuraava esimerkki osoittaa, voit välittää merkkijonon tai viittauksen siihen argumenttina generaattorille.

>>> data = >>> tulosta(data) ["p", "y", "t", "h", "o", "n"]

Tämän koodin suorittamisen tuloksena luodaan luettelo merkeistä, jotka alkuperäinen merkkijono sisältää. Kuten edellisessä esimerkissä, voit näyttää tuloksena saadun tietojoukon näytöllä jo tutulla tulostusmenetelmällä.

Generaattori kunnossa

Yksi yleisesti käytetyistä tavoista luoda luetteloita Pythonissa on ehto. Edelliset esimerkit osoittivat melko triviaalia lähestymistapaa luettelon täyttämiseen generaattorin avulla. Python-kielen rakennetiedot voit asettaa tietyt ehdot tällaisen toiminnon suorittamiselle. Esimerkiksi on tehtävä siirtää vain parilliset numerot luetteloon numeerisia arvoja aiemmin luodusta valikoimasta.

>>> tiedot = >>> tulosta (data)

If-lause tulee peliin, jota seuraa pieni lause, jossa sanotaan, että sekvenssin jokaisen elementin on täytettävä jokin ehto. Tässä tapauksessa on välttämätöntä palauttaa 0 kokonaisluvun jaon jäännöslaskennan tuloksena. Kuten näette, kokeen läpäisseet numerot sisällytettiin luetteloon.

Generaattori syklillä

Python antaa sinun myös luoda luettelon käyttämällä useita silmukoita., sijoittamalla ne alustushakasulkeisiin. Seuraavassa esimerkissä käytetään kahta konstrukteille, jotka toistuvat vuorotellen muuttujien i ja j arvojen yli. Niiden numeerinen alue (0 - 3), kuten aiemmin, asetetaan aluemenetelmillä.

>>> tiedot = >>> tulosta (data)

Tämän koodin suorittamisen tuloksena luodaan dataluettelo, joka perustuu muuttujien i ja j vuorotellen kertomiseen. For-silmukoiden ansiosta niiden arvot kasvavat askel askeleelta. Tämä luo yhdeksän elementin luettelon.

Sisäkkäisten luetteloiden luominen

Joskus ohjelmoijan on käytettävä luetteloita, joissa on useampi kuin yksi ulottuvuus. Esimerkiksi moniulotteisia tietojoukkoja voidaan tarvita matemaattisten matriisien kanssa työskennellessä. Voit myös käyttää generaattoreita tehdäksesi tämän Pythonissa yksinkertaisesti luomalla silmukan luettelon luomiseksi toisen sisään. Sisäkkäisen luettelon laajuusrajoitukset ovat hakasulkeet, kuten seuraavassa esimerkissä näkyy.

>>> data = [ j:lle alueella(0, 3)] >>> tulosta(data) [, , ]

Tämä koodi näyttää kuinka luodaan kaksiulotteinen 3x3-matriisi Pythonin kaksiulotteisen listageneraattorin avulla. Tämän numeerisen sekvenssin elementit olivat aluemenetelmien digitaaliset arvot, kuten edellisissä esimerkeissä. Muuttujia i ja j kasvatetaan asteittain sykleissä yhdellä ja kerrotaan keskenään. Tulostustoimintoa käytetään luodun tietojoukon visuaaliseen näyttämiseen tietokoneen näytöllä.

Melko usein Python-sisäkkäistä listaa luotaessa käytetään nollien matriisia generaattoria. Luodaan esimerkiksi 3x2 matriisi:

>>> data = [ y:lle alueella(3)] >>> tulosta(data) [, , ]

Listageneraattori lambdalla

Kuten tiedät, lambda-funktiot Pythonissa ovat toiminto, joka palauttaa arvon. Tämän mekanismin etuna on, että sitä voidaan käyttää lausekkeen sisällä. Tämä voi vähentää merkittävästi ohjelmoijan kirjoitettavan koodin määrää, koska tässä tapauksessa uutta menetelmää ei tarvitse erikseen ilmoittaa. Listageneraattori, jossa on lambda Pythonissa, sallii

Python lambda -funktioita käytetään joskus luettelogeneraattoreissa. Seuraava esimerkki luo uuden numerosarjan, joka johtuu aluemenetelmästä. Kuten ennenkin, tämän joukon elementti esitetään muuttujana i, jolle annetaan asteittain uusia arvoja (0-9) silmukalle. Lambda-funktio ottaa arvon argumenttina, kertoo sen sitten itsellään ja palauttaa sen takaisin generaattorille.

>>> data = [(lambda i: i*i)(i) i:lle alueella(0, 10)] >>> tulosta(data)

Tämä luo luettelon, datan, joka sisältää tulokset numeroiden 0–9 neliöimisestä. Kuten tavallista, tulostustoiminto tulostaa tiedot näytölle.

Itert-työkalujen käyttö

Edistyneen luettelon luomiseen Pythonissa käytetään itertools-nimistä liitännäiskirjastoa. Sen avulla voit luoda arvojoukkoja tiettyjen sääntöjen mukaisesti. Aktivoidaksesi tämän moduulin toiminnot, sinun tulee lisätä seuraava ohje ohjelmatiedoston alkuun.

Tuo itertotyökalut

Tämän kirjaston sisältämien menetelmien avulla voit luoda luetteloita parannettujen silmukoiden avulla. Esimerkiksi, sen avulla voit helposti luoda yhdistelmiä eri arvoista, sekä symbolisista että numeerisista. Seuraava koodi on yksinkertainen esimerkki luodaan luettelo, jossa on kutsu toistotoimintoon.

>>> tiedot = >>> tulosta (data)

Kuten tuloksesta näkyy, menetelmä palauttaa identtisten objektien sarjan (tässä tapauksessa luvun 1), toistettuna 5 kertaa.

Johtopäätös

Pitkälle kehittynyt toiminnallisuutta, jota Pythonissa edustavat luettelogeneraattorit, antavat ohjelmoijalle mahdollisuuden lisätä tietojenkäsittelyn nopeutta ja tehokkuutta. Tarkasteltava mekanismi sisältää sekä tavallisten että moniulotteisten listojen luomisen tiettyjen ehtojen perusteella sekä silmukoiden käytön. Kielellä on myös kyky luoda käyttämällä lambda-lausekkeita ja käyttämällä intertools-kirjastoa.

Python tukee käsitettä nimeltä "listan ymmärtäminen" ( listageneraattoreita).

Tämän konseptin avulla voit luoda luetteloita hyvin luonnollisella ja helpolla tavalla, aivan kuten matemaatikot tekevät.

Alla on yleisiä tapoja kuvata luetteloita (tai kokoelmia tai monikoita tai vektoreita) matematiikassa:

S = (x 2: x tuumaa (0 ... 9))
V = (1,2,4,8, ..., 2 2)
M = (x | x S:ssä ja x parillinen)

Saatat muistaa tällaisia ​​asioita koulusta. Pythonissa voit kirjoittaa nämä samat lausekkeet aivan kuten matemaatikko ilman, että sinun tarvitsee muistaa erityistä syntaksia.

Miltä ilmaisumme näyttävät Pythonissa:

>>> S = >>> V = >>> M = >>> >>> tulosta S; tulostaa V; tulosta M
Olen varma, että haluat nähdä monimutkaisemman esimerkin. :) Alla esittelemme toisen tavan löytää alkulukuja. Mielenkiintoista on, että luomme ensin luettelon ei-alkuluvuista käyttämällä ensimmäistä luettelogeneraattoria ja sitten toista luettelogeneraattoria saadaksemme luettelon "käänteisen", joka on alkuluvut.

>>> noprimes = >>> alkuluvut = >>> tulosta alkuluvut HUOM: Voit upottaa listageneraattoreita toisiinsa, joten esimerkissämme pärjäisit yhdellä lausekkeella (ilman että "noprimes"-muuttujaa tarvitsee tallentaa välitulokset). Ilmaisumme olisi kuitenkin pitkä ja vähemmän luettava, mikä ei ole suositeltavaa. Tietenkin listageneraattoria voidaan käyttää muuhunkin kuin vain numeroihin. Listat voivat sisältää minkä tahansa tyyppisiä elementtejä, mukaan lukien merkkijonoja, upotettuja luetteloita ja toimintoja. Voit jopa sekoittaa Erilaisia ​​tyyppejä yhdessä listassa.

Seuraavassa esimerkissä käsittelemme merkkijonoluetteloa ja luomme luettelon. Jokainen sisäänrakennetuista luetteloista sisältää kaksi merkkijonoa ja yhden kokonaisluvun.

>>> words = "Nopea ruskea kettu hyppää laiskan koiran yli".split() >>> tulosta sanat ["The", "quick", "ruskea", "kettu", "hyppää", "yli", "the", "laiska", "koira"] >>> tavaraa = [ w:lle sanoissa] >>> i:lle tavarassa: ... tulosta i
["THE", "the", 3] ["QUICK", "quick", 5] ["BROWN", "brown", 5] ["FOX", "fox", 3] ["HYPYT", " hyppää", 5] ["YLI", "yli", 4] ["THE", "the", 3] ["LASKA", "laiska", 4] ["KOIRA", "koira", 3] > >> tavarat = kartta(lambda w: , sanat) >>> i in stuff: ... tulosta i ["THE", "the", 3] ["QUICK", "quick", 5] ["RUSKEA" " ", "ruskea", 5] ["Kettu", "kettu", 3] ["HYPPI", "hyppää", 5] ["YLI", "yli", 4] ["THE", "the" , 3] ["LASKA", "laiska", 4] ["KOIRA", "koira", 3]
Yllä oleva esimerkki osoittaa, että voit toteuttaa tehtävämme kahdella tavalla - ensin käyttämällä listageneraattoria ja sitten käyttämällä map() ja lambda-funktiota. On kuitenkin tapauksia, joissa et voi käyttää map():aa, vaan täytyy käyttää listageneraattoria ja päinvastoin. Jos molemmat menetelmät sopivat, on usein parempi käyttää luettelogeneraattoria, koska se on tehokkaampi ja luettavampi useimmissa tapauksissa.

Et voi käyttää luettelogeneraattoreita, kun koostumusehto on liian monimutkainen ilmaistaviksi "for"- ja "if"-lauseilla tai kun ehto muuttuu dynaamisesti ohjelman ollessa käynnissä. Tässä tapauksessa on parempi käyttää map() ja/tai filter() sopivalla funktiolla. Tietenkin voit yhdistää ne luettelogeneraattoriin.

Alkuperäinen artikkeli: