Lista de înțelegeri vă oferă o modalitate de scriere pentru
buclele sunt mai concise. Acestea pot fi utile atunci când doriți să creați liste noi din listele existente sau iterabile. De exemplu, puteți utiliza comprehensiunea listei pentru a crea o listă de pătrate dintr-o listă de numere. În mod similar, puteți utiliza și anumite condiții pe o listă de numere, astfel încât noua listă pe care o creați să fie un subset al listei originale.
Țineți minte că nu puteți scrie fiecare pentru
buclă ca o înțelegere a listei. Un alt lucru: numele "comprehensions list" poate fi un pic confuz, deoarece pare să sugereze că înțelegerile sunt doar pentru a lucra cu liste. În realitate, cuvântul "listă" din comprehensiunea listei este folosit pentru a indica faptul că puteți trece peste orice iterabil în Python și produsul final ar fi o listă.
Lista comprehensivă a listei de bază care nu utilizează nicio condiție are următoarea formă:
[pentru în ]
Să începem prin a scrie un foarte simplu pentru
pentru a lista primele 15 multipli de 5. În primul rând, trebuie să creați o listă goală. Apoi, trebuie să repetați o serie de numere și să le multiplicați cu 5. Noua secvență de numere pe care o obțineți va fi compusă din multiplii de 5.
multiplici = [] pentru n în intervalul (1,16): multiples.append (n * 5) imprimare (multipli) # [5,10,15,20,25,30,35,40,45,55,55, 60, 65, 70, 75]
De mai sus pentru
buclă are în principal următoarea structură:
pentruîn :
Dacă o comparați cu formularul de înțelegere a listei pe care l-ați citit mai devreme, puteți vedea acest lucru
este n
,
este Gama (1,16)
, și
este n * 5
. Punerea acestor valori în înțelegerea listei ne va da următorul rezultat:
multipli = [n * 5 pentru n în intervalul (1,15)] multipli # [5,10,15,20,25,30,35,40,45,50,55,60,65,70]
În mod similar, puteți obține și o listă cu cubul numerelor date, cum ar fi:
cuburi = [n ** 3 pentru n în intervalul (1,16)] imprimare (cuburi) # [1, 8, 27, 64, 125, 216, 343, 512, 729, 1000, 1331, 1728, 2197, 2744 , 3375]
Puteți utiliza, de asemenea, un dacă
condiție pentru a filtra anumite valori din lista finală. În acest caz, comprehensiunea listei are următoarea formă:
[pentru în dacă ]
Un exemplu de bază al acestui tip de înțelegere ar fi obținerea tuturor numerelor paralele într-un anumit interval. A pentru
buclă pentru a face această sarcină va arăta astfel:
(1, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
Același lucru ar putea fi, de asemenea, realizat folosind următoarea listă de înțelegere:
(1, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20)
Un exemplu mai complex de utilizare a înțelegerii listei ar fi adăugarea ... dacă ... altfel ...
expresii condiționate în ele.
În acest caz, ordinea în care stabiliți afirmațiile din interiorul listei de înțelegere va fi diferită de cea obișnuită dacă
Condiții. Când aveți doar un dacă
condiție, condiția merge până la sfârșitul înțelegerii. Cu toate acestea, în cazul unui ... dacă ... altfel ...
expresie, pozițiile pentru
buclă și expresia condițională sunt schimbate. Noul ordin este:
[dacă altfel pentru în ]
Să începem prin a scrie versiunea verbală ... dacă ... altfel ...
expresie condiționată pentru a obține pătrate de numere și cuburi de numere impare într-un anumit interval.
(n = 3) print (cuburi pătrate) # [1, n = 2] 4, 27, 16, 125, 36, 343, 64, 729, 100, 1331, 144, 2197, 196, 3375]
Expresia condiționată de mai sus are următoarea structură:
pentruîn : dacă : altceva:
Punerea valorilor corespunzătoare în locurile potrivite vă va oferi următoarea listă de înțelegere:
(1, 4, 27, 16, 125, 36, 343 și 64 , 729, 100, 1331, 144, 2197, 196, 3375]
De asemenea, puteți utiliza bucle imbricate într-o înțelegere a listei. Nu există nici o limită a numărului de pentru
buclele pe care le puteți pune în interiorul unei înțelegeri a listei. Cu toate acestea, trebuie să țineți cont de faptul că ordinea buclelor ar trebui să fie aceeași atât în codul original cât și în înțelegerea listei. De asemenea, puteți adăuga un element opțional dacă
după fiecare pentru
buclă. O înțelegere a listei cu imbricate pentru
buclele vor avea următoarea structură:
[pentru în (opțional dacă ) pentru în (opțional dacă ) pentru în (opțional dacă )… si asa mai departe… ]
Următoarele exemple ar trebui să facă totul mai clar. Există două bucle imbricate, iar înmulțirea lor ne dă niște tabele de multiplicare.
multiplicări = [] pentru i în intervalul (1, 4): pentru n în intervalul (1, 11): multiplications.append (i * n) 7, 8, 9, 10, 2, 4, 6, 8, 10,12,14,16,18,20,3,6,9,12,15,18,21,24,27,30]
Acestea sunt imbricate pentru
buclele pot fi rescrise ca:
pentruîn : pentru în :
Odată ce ați scris bucla în această formă, convertiți-o într-o înțelegere a listei este ușor:
multiplicări = [i * n pentru i în intervalul (1,4) pentru n în intervalul (1,11)] imprimare (înmulțiri) # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 3, 6, 9, 12, 15, 18, 21, 24,
Puteți utiliza, de asemenea, o înțelegere similară a listei scrise pentru a aplatiza o listă de liste. Exterior pentru
buclă iterează prin listele individuale și le stochează în variabilă rând
. Interiorul pentru
buclă va itera apoi prin toate elementele din curent rând
. În timpul primei iterații, variabila rând
are valoarea [1, 2, 3, 4]
. A doua bucla iterează prin această listă sau rând
și adaugă toate aceste valori la lista finală.
matrice = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12] ) # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
Nimeni nu poate înțelege o listă asemănătoare cu comportamentele listate cu bucle imbricate, dar sunt foarte diferite. În primul caz, aveați de-a face cu bucle în bucle. În acest caz, veți avea de-a face cu înțelegerea listei în cadrul înțelegerii listei. Un bun exemplu de înțelegere a listei imbricate ar fi crearea unei transpuneri a matricei pentru secțiunea anterioară.
Fără o expresie de înțelegere a listei, va trebui să utilizați două pentru
bucle pentru a crea transpunerea.
matrice = [[1, 2, 3, 4], [5, 6, 7, 8], [9,10,11,12]] transpose = [] pentru rand în matrice: temp.append (rând [i]) transpose.append (temp) print (transpunere) # [[1, 5, 9], [2, [4, 8, 12]]
Bucla exterioară se repetă prin matricea de patru ori, deoarece există patru coloane în ea. Buclele interioare iterează prin elementele din interiorul rândului curent câte un indice la un moment dat și îl adaugă la o listă temporară numită temp
. temp
lista este apoi atașată ca un rând la matricea transpusă. În cazul înțelegerii listei imbricate, bucla cea mai îndepărtată se găsește la capăt, iar bucla cea mai interioară vine la început.
Iată codul de mai sus sub forma unei înțelegeri a listei:
matrice = [[1,2,3,4], [5, 6, 7, 8], [9,10,11,12]] transpune = [[rând [n] (4)] imprimare (transpunere) # [[1, 5, 9], [2, 6, 10], [3, 7, 11], [4,8,12]]
O altă modalitate de a se uita la acest lucru este luarea în considerare a structurii listei de înțelegeri care înlocuiesc elementele de bază pentru
buclele pe care le-ați învățat la începutul articolului.
[pentru în ]
Dacă o comparați cu înțelegerea listei imbricate de mai sus, veți vedea asta
în acest caz este de fapt o altă înțelegere a listei: [rând [n] pentru rând în matrice]
. Această înțelegere a listei imbricate în sine este sub forma unui element de bază pentru
buclă.
Sper că acest tutorial v-a ajutat să înțelegeți ce înțelegeri de listă sunt și cum să le utilizați în locul celor de bază pentru
bucle pentru a scrie cod concis și ușor mai rapid în timp ce creați liste.
Un alt lucru pe care ar trebui să-l țineți cont este citirea codului dvs. Crearea comprehensibilității listelor pentru buclele imbricate va face probabil codul mai puțin lizibil. În astfel de cazuri, puteți împărți comprehensiunea listei în mai multe linii pentru a îmbunătăți lizibilitatea.
În plus, nu ezitați să vedeți ce avem la dispoziție pentru vânzare și pentru studiul pe Envato Market și nu ezitați să puneți întrebări și să furnizați feedback-ul dvs. valoros utilizând feedul de mai jos.