Liste Python
Liste Python
Putem salva aceste valori ca variabilă, așa cum arată aceste exemple. Fiecare variabilă
reprezintă apoi o singură valoare.
Vom dori adesea să lucrăm cu mai multe date. Dacă, de exemplu, dorim să măsurăm
înălțimea tuturor din familia și să stocami aceste informații în Python, ar fi incomod să
creăm o nouă variabilă Python pentru fiecare valoare pe care o colectăm. Ceea ce
putem face în schimb, este să stocăm toate aceste informații într-o listă Python.
Problema
Această structură de date poate fi considerată o variabilă. Pur și simplu punem numele
variabilei și semnul egal în față.
O listă este o modalitate de a da un singur nume unei colecții de valori. Aceste valori,
sau elemente, pot avea orice tip; pot fi float, integer, boolean, șiruri, dar și tipuri mai
avansate de date Python, chiar și alte liste. Este posibil ca o listă să conțină și diferite
tipuri de date.
Să presupunem, de exemplu, că dorim să adăugăm în listă numele surorilor și ale
părinților astfel încât să știm ce înălțime are fiecare. Listele pot conține și liste în sine.
În loc să punem șirurile între numere, putem crea mici subliste pentru fiecare membru al
familiei. Unul pentru Liz, unul pentru Emma și așa mai departe. Acum, îi putem indica lui
Python că aceste subliste sunt elementele unei alte liste, pe care am numit-o fam2:
Listele mici sunt plasate între paranteze drepte și separate prin virgule. Dacă vizualizam
acum fam2, vedem că avem o listă de liste. Lista principală conține 4 subliste. Avem
de-a face cu un nou tip de date Python, pe lângă șiruri, valori booleene, numere întregi
și float despre care știm deja.
Tipuri de liste
În apelările de mai jos vedem că atât fam, cât și fam2 sunt liste. Fiecare tip de date are
asociate funcționalități și comportamente specifice. Pentru liste, acest lucru este de
asemenea adevărat. Listele Python au o mulțime de instrumente pentru a le subseta și
adapta. Dar să o luăm pas cu pas:
Extragerea listelor
După ce am creat propria listă Python, va trebui să învățăm cum putem accesa
informațiile din listă.
Primul element din listă are indicele 0, al doilea element are indicele 1 și așa mai
departe. Să presupunem că dorim să selectăm înălțimea Emmei (float 1.68). Este al
patrulea element, deci are indexul 3. Pentru a-l selecta, folosim 3 între paranteze
pătrate.
În mod similar, pentru a selecta șirul „dad” din listă, care este al șaptelea element din
listă, va trebui să punem indexul 6 între paranteze pătrate.
De asemenea, putem număra invers, folosind indexarea negativa. Acest lucru este util
dacă dorim să obținem elemente de la sfârșitul listei. Pentru a obține înălțimea tatălui
tău, de exemplu, vom folosi index -1.
Mai întâi să aruncăm o altă privire la listă și apoi să încercăm această bucată de cod.
Apare o listă cu float 1.68, șirul „mom” și float 1.71, corespunzătoare celui de-al 4-lea, al
5-lea și al 6-lea element din listă ? Să vedem care este rezultatul.
Aparent, doar elementele cu indexul 3 și 4 sunt returnate. Elementul cu index 5 nu este
inclus.
În general, aceasta este sintaxa: indexul pe care îl specificam înainte de două puncte,
deci unde începe selecția, este inclus, în timp ce indexul pe care îl specificam după
două puncte, unde se termină selecția, este omis. Având în vedere acest lucru, putem
deduce ce va returna această apelare?
De asemenea, putem alege să omitem indexul înainte sau după două puncte.
Dacă omitem indexul unde ar trebui să înceapă selecția, îi spunem lui Python să
înceapă felia de la indexul 0, ca în acest exemplu:
Dacă omitem indexul unde ar trebui să se încheie selecția, includem toate elementele
până la ultimul element din listă, ca in acest exemplu:
Continuați să lucrați la lista pe care v-ați creat-o înainte. Folosiți diferite metode de
slicing pentru a obține exact informația de care aveți nevoie!
Manipularea listelor
După crearea și tăierea listelor, ultima piesă a puzzle-ului listelor Python este
manipularea. Manipularea listelor reprezinta modalități de a schimba elemente din lista,
a adăuga elemente in lista și de a elimina elemente din listă.
Modificarea elementelor din lista este destul de simplă. Folosim aceleași paranteze
pătrate pe care le-am folosit pentru a subseta liste și apoi îi atribuim elemente noi
folosind semnul egal.
Să presupunem că după o altă privire asupra fam, observam că înălțimea tatălui tău nu
mai este la zi, deoarece se micșorează odată cu vârsta. În loc de 1.89 metri, ar trebui
să fie 1.86 metri. Pentru a schimba acest element de listă, care se află la indexul 7,
putem folosi această linie de cod:
În cele din urmă, ștergerea elementelor dintr-o listă este, de asemenea, destul de
simplă, va trebui să utilizăm funcția del()i. Luăm linia de mai sus de exemplu, care
șterge elementul cu index 2, deci „emma”, din listă. Dacă verificam fam, observăm că
șirul „emma” a dispărut.
Deoarece am eliminat un index, toate elementele care erau după „emma” au fost
depășite cu un index. Dacă rulăm din nou aceeași linie, eliminam din nou elementul
index 2, care este înălțimea Emmei, 1.68 metri.
Înțelegerea modului în care listele Python funcționează în culise, devine destul de
importantă acum.
Aceasta înseamnă că x nu conține de fapt toate elementele listei, mai degrabă conține
o referință la listă.
Pentru operațiunile de bază, diferența nu este atât de importantă, dar devine mai
importantă atunci când începem să copiem liste.
Să clarificăm acest lucru cu un exemplu:
Să schimbăm acum elementul cu indexul unu din lista y. Ce observam ciudat este că,
dacă acum verificăm din nou x, aici tot a fost schimbat al doilea element.
Asta pentru că atunci când am copiat x în y cu semnul egal, am copiat de fap referința
la listă, nu valorile reale în sine.
Când actualizam un element din lista, modificăm una și aceeași listă din memoria
calculatorului. Atât x, cât și y indică această listă, astfel încât actualizarea este vizibilă in
ambele variabile.
Dacă dorim să creăm o listă y care indică o nouă listă în memorie cu aceleași valori, va
trebui să folosim altceva decât semnul egal.
Putem utiliza funcția list() astfel:
sau utilizam subsetarea (felierea) pentru a selecta în mod explicit toate elementele
listei.