Ohjelmointi

Kuinka työskennellä Python-luettelotietotyypin kanssa

Pythonin mukana tulee kokoelma sisäänrakennettuja tietotyyppejä, jotka tekevät tavallisista tiedonkäsittelytoiminnoista helppoja. Niiden joukossa onlista, yksinkertainen mutta monipuolinen mallistotyyppi. Python-luettelon avulla voit ryhmitellä Python-objektit yhteen kolmiulotteiseen riviin, jonka avulla objekteja voidaan käyttää sijainnin, lisäämisen, poistamisen, lajittelun ja jakamisen mukaan.

Python-luettelon perusteet

Luettelon määritteleminen Pythonissa on helppoa - käytä vain hakasulaksen syntaksia osoittamaan luettelon kohteet.

list_of_ints = [1, 2, 3]

Luettelon kohteiden ei myöskään tarvitse olla kaikkia samaa tyyppiä. Ne voivat olla mitä tahansa Python-objekteja. (Oletetaan tässäKolme on funktio.)

list_of_objects = ["Yksi", KAKSI, Kolme, {"Neljä": 4}, Ei mitään]

Huomaa, että objektien sekoittaminen luetteloon voi vaikuttaa luettelon lajitteluun. Menemme tähän myöhemmin.

Suurin syy käyttää luetteloa on löytää esineitä niiden perusteella asentoon luettelossa. Voit tehdä tämän käyttämällä Pythonin hakemistomerkintää: suluissa oleva numero, joka alkaa nollasta, joka osoittaa kohteen sijainnin luettelossa.

Yllä olevassa esimerkissä list_of_ints [0] tuotot 1. list_of_ints [1] tuotot 2. esineiden luettelo [4] olisiEi mitään esine.

Python-luettelon indeksointi

Jos käytät hakemistoon positiivista kokonaislukua, kokonaisluku osoittaa etsittävän kohteen sijainnin. Mutta jos käytät anegatiivinen kokonaisluku, sitten kokonaisluku osoittaa sijainnin alkaenloppuun luettelon. Esimerkiksi käyttämällä hakemistoa -1 on kätevä tapa napata luettelon viimeinen kohde luettelon koosta riippumatta.

list_of_ints [-1] tuotot3esineiden luettelo [-1] tuototEi mitään.

Voit käyttää hakemistona myös kokonaislukumuuttujaa. Josx = 0list_of_ints [x] tuottaa 1 ja niin edelleen.

Python-luettelokohteiden lisääminen ja poistaminen

Pythonilla on useita tapoja lisätä tai poistaa kohteita luettelosta.

  • .append () lisää kohteen kohtaanloppuun luettelon. Esimerkiksi, list_of_ints.append (4) kääntyisilist_of_ints luetteloon[1,2,3,4]. Lisäosat ovat nopeita ja tehokkaita; yhden kohteen lisääminen luetteloon vie suunnilleen saman ajan kuin luettelon pituus on.
  • .pop() poistaa ja palauttaa viimeisen kohteen luettelosta. Jos juoksemmex = list_of_ints.pop () alkuperäiseenlist_of_ints, x sisältäisi arvon3. (Sinun ei tarvitse määrittää tuloksia.pop() arvoon, jos et tarvitse sitä.).pop()toiminta on myös nopeaa ja tehokasta.
  • .insert () lisää kohteen johonkin mielivaltaiseen kohtaan luettelossa. Esimerkiksi,list_of_ints.insert (0,10) kääntyisilist_of_ints osaksi [10,1,2,3]. Huomaa, että mitä lähemmäksi asetat luettelon etuosaan, sitä hitaampi tämä toiminto on, vaikka hidastumista ei havaita paljoakaan, ellei luettelossasi ole monia tuhansia elementtejä tai jos teet lisäyksiä tiukasti.
  • .pop (x) poistaa kohteen hakemistostax. Niinlist_of_ints.pop (0) poistaisi kohteen indeksistä 0. Jälleen, mitä lähempänä olet luettelon etuosaa, sitä hitaampi tämä toiminto voi olla.
  • .Poista esine) poistaa kohteen luettelosta, muttaei sen indeksin perusteella. Pikemminkin .Poista() poistaaensimmäinen esiintyminen määrittämäsi objektin etsiminen luettelon yläosasta alaspäin. Sillä[3,7,7,9,8] .poista (7), ensimmäinen7 poistettaisiin, mikä johtaisi luetteloon[3,7,9,8]. Myös tämä toiminto voi hidastua suurelle listalle, koska sen on teoriassa toimittava koko luettelon läpi toimiakseen.

Python-luettelon viipalointi

Luettelot voidaan jakaa uusiin luetteloihin, nimeltään prosessiviipalointi. Pythonin viipaleiden syntaksin avulla voit määrittää, mikä luettelon osa kaiverretaan pois ja kuinka käsitellä veistettyä osaa.

Näit edellä, kuinka suluissa käytetään yhden kohteen saamista luettelosta: oma_lista [2], esimerkiksi. Viipaleet käyttävät saman indeksimerkinnän muunnosta (ja noudattavat samoja indeksointisääntöjä): list_object [alku: lopeta: vaihe].

  • alkaa on sijainti luettelossa aloittaaksesi leikkeen.
  • lopettaa on luettelon sijainti, jossa lopetamme viipaloinnin. Toisin sanoen,tuo asema ja kaikki sen jälkeen jätetään pois.
  • askel on valinnainen "joka n. elementti" -indikaattori leikkeelle. Oletuksena tämä on1, joten siivu säilyttää kaikki elementit luettelosta, josta viipaloi. Aseta askel että2, ja valitset joka toinen elementti jne.

Tässä on joitain esimerkkejä. Harkitse tätä luetteloa:

viipalista = [1,2,3,4,5,6,7,8,9,0]

slice_list [0: 5] = [1, 2, 3, 4, 5]

(Huomaa, että pysähdymme hakemistoon 4, ei indeksiin 5!)

viipalista [0: 5: 2] = [1, 3, 5]

Jos jätät tietyn siivuindeksin pois, Python olettaa oletusarvon. Jätä pois aloitusindeksi ja Python olettaa luettelon alun:

slice_list [: 5] = [1, 2, 3, 4, 5]

Jätä pois pysäytysindeksistä, ja Python olettaa luettelon lopun:

viipalista [4:] = [5, 6, 7, 8, 9, 0]

askel elementti voi myös ollanegatiivinen. Näin voimme ottaa viipaleita, jotka ovat käänteisiä kopioita alkuperäisestä:

viipalista [:: - 1] = [0, 9, 8, 7, 6, 5, 4, 3, 2, 1]

Huomaa, että voit leikata taaksepäin käyttämällä alku- ja lopetusindeksejä, jotka menevät taaksepäin, ei eteenpäin:

viipalista [5: 2: -1] = [6, 5, 4]

Pidä myös mielessä, että luetteloviipaleet ovatkopioita alkuperäisen luettelon. Alkuperäinen luettelo pysyy muuttumattomana.

[Myös: Parhaat ilmaiset tietojenkäsittelykurssit karanteenin aikana]

Python-luettelon lajittelu

Python tarjoaa kaksi tapaa lajitella luetteloita: Voit luoda uuden, lajiteltu luettelon vanhasta tai voit lajitella olemassa olevan luettelon paikan päällä. Näillä vaihtoehdoilla on erilainen käyttäytyminen ja erilaiset käyttötilanteet.

Luo uusi, lajiteltu luettelo käyttämällälajiteltu () toiminto vanhassa luettelossa:

uusi_lista = lajiteltu (vanha_luettelo)

Tämä lajittelee luettelon sisällön käyttämällä Pythonin oletuslajittelumenetelmiä. Merkkijonojen oletusarvo on aakkosjärjestys; numeroiden osalta se on nouseva arvo. Huomaa, että luettelon sisällön on oltava johdonmukainen, jotta tämä toimisi. Et voi esimerkiksi lajitella sekoitus kokonaislukuja ja merkkijonoja, mutta voit lajitella luettelon, joka on kaikki kokonaisluvut tai kaikki merkkijonot. Muuten saat aTyyppivirhe lajittelutoiminnossa.

Jos haluat lajitella luettelon päinvastoin, välitäkäänteinen parametri:

new_list = lajiteltu (old_list, käänteinen = True)

Toinen tapa lajitella,paikallaan lajittelu, suorittaa lajittelutoiminnon suoraan alkuperäisessä luettelossa. Voit tehdä tämän käyttämällä luetteloa.järjestellä()menetelmä:

old_list.sort ()

.järjestellä() myös ottaakäänteinen parametrina, jonka avulla voit lajitella käänteisesti.

Molemmatlajiteltu () ja.järjestellä() myös ottaa aavain parametri. avain parametri antaa sinulle toiminnon, jota voidaan käyttää mukautetun lajittelun suorittamiseen. Kun luettelo on lajiteltu, kukin elementti välitetäänavain funktiota, ja tuloksena olevaa arvoa käytetään lajitteluun. Esimerkiksi, jos meillä olisi sekoitus kokonaislukuja ja merkkijonoja, ja haluaisimme lajitella ne, voisimme käyttääavain kuten tämä:

mixed_list = [1, "2", 3, "4", Ei mitään] def sort_mixed (item): try: return int (item) paitsi: return 0 sorted_list = lajiteltu (mixed_list, avain = sort_mixed) tulosta (sorted_list)

Huomaa, että tämä koodi eimuuntaa jokainen luettelon osa kokonaislukuksi! Pikemminkin se käyttäisi kokonaislukuaarvo jokaisen kohteen lajitteluarvona. Huomaa myös, miten käytämme ayritä / paitsi esto ansaita arvot, jotka eivät käänny puhtaasti kokonaislukuna, ja palata0 heille oletuksena.

Python-luettelot eivät ole taulukoita

Yksi tärkeä asia Pythonin luetteloissa on, että ne eivät ole "matriiseja". Muilla kielillä, kuten C, on yksi- tai moniulotteinen rakenne, jota kutsutaan matriiseiksi ja jotka hyväksyvät yhden tyyppiset arvot. Luettelot ovat heterogeenisiä; he voivat hyväksyä kaikenlaisia ​​esineitä.

Lisäksi sielläOn erillinentaulukko kirjoita Python. Python taulukko on suunniteltu jäljittelemään taulukon käyttäytymistä C: ssä, ja se on tarkoitettu pääasiassa sallimaan Pythonin työskentelemään C-ryhmien kanssa.taulukko type on hyödyllinen näissä tapauksissa, mutta melkein kaikissa puhtaissa Python-tapauksissa haluat käyttää luetteloita.

Milloin käyttää Python-luetteloita (ja milloin ei)

Joten milloin Python-luettelot ovat hyödyllisimpiä? Luettelo on paras, kun:

  • Sinun täytyy löytää asiat nopeasti heidän mukaansaasentoon kokoelmassa. Luettelon minkä tahansa sijainnin käyttäminen vie saman ajan, joten ei edes rangaistusta edes miljoonan kohteen luettelosta etsimisestä.
  • Lisäät ja poistat kokoelmaa lähinnä liittämällä loppuun tai poistamalla päästä pinon tavoin. Nämä toiminnot vievät jälleen saman ajan luettelon pituudesta riippumatta.

Python-luettelo ei ole yhtä sopiva, kun:

  • Haluat löytää kohteen luettelosta, mutta et tiedä sen sijaintia. Sinävoi tee tämä.indeksi() omaisuus. Voit esimerkiksi käyttäälist_of_ints.index (1) löytääksesi numeron ensimmäisen esiintymisen indeksin1 sisäänlist_of_ints. Nopeuden ei pitäisi olla ongelma, jos luettelosi on vain muutama kohde pitkä, mutta tuhansien kohteiden luettelo tarkoittaa, että Pythonin täytyy etsiä koko luettelosta. Käytä tällaisessa tilanteessa sanakirjaa, josta kukin kohde löytyy avaimella ja jossa hakuaika on sama kullekin arvolle.
  • Haluat lisätä tai poistaa kohteita mistä tahansa sijainnista paitsi lopusta. Aina kun teet tämän, Pythonin täytyy liikkuajoka toinen kohde jälkeenlisätyn tai poistetun kohteen. Mitä pidempi luettelo, sitä suurempi suorituskykyongelma tästä tulee. Pythonindeque objekti sopii paremmin, jos haluat lisätä tai poistaa esineitä vapaasti joko luettelon alusta tai lopusta.

Kuinka tehdä enemmän Pythonilla

  • Kuinka pakata Python-sovellukset BeeWare-salkulla
  • Kuinka ajaa Anacondaa vierekkäin muiden pythonien kanssa
  • Kuinka käyttää Python-tietoluokkia
  • Aloita asynkronointi Pythonissa
  • Asyncion käyttäminen Pythonissa
  • 3 vaihetta Pythonin asynkroniseen huoltoon
  • Kuinka käyttää PyInstalleria Python-suoritettavien tiedostojen luomiseen
  • Cython-opetusohjelma: Kuinka nopeuttaa Pythonia
  • Kuinka asentaa Python älykkäästi
  • Kuinka hallita Python-projekteja Poetryn avulla
  • Kuinka hallita Python-projekteja Pipenv: llä
  • Virtualenv ja venv: Python-virtuaaliympäristöt selitetty
  • Python virtualenv ja venv do and don'ts
  • Python-ketjuttaminen ja aliprosessit on selitetty
  • Kuinka käyttää Python-virheenkorjainta
  • Kuinka käyttää timeit Python-koodin profilointiin
  • CProfilen käyttäminen Python-koodin profilointiin
  • Kuinka muuntaa Python JavaScriptiksi (ja takaisin)
$config[zx-auto] not found$config[zx-overlay] not found