Treci la conținutul principal

Transformarea unei colecții

O transformare pornește de la o colecție, cum ar fi o listă sau un dicționar, și construiește din ea o colecție nouă. Colecția originală nu se schimbă.

În Python, instrumentul principal este comprehension: o expresie scurtă între paranteze drepte care construiește o listă nouă, sau între acolade pentru un dicționar nou. Majoritatea transformărilor de pe această pagină au o singură linie. Funcțiile predefinite zip și enumerate și metoda de șir join acoperă restul.

Python are și o funcție predefinită map(), care aplică o funcție fiecărui element. Funcționează, dar un comprehension spune același lucru mai clar și poate și să sară peste elemente, așa că această pagină folosește comprehension-uri.


Map

Operația map aplică aceeași funcție fiecărui element și adună rezultatele într-o listă nouă, de aceeași lungime. De exemplu, poate transforma [1, 2, 3] în [3, 6, 9].

În Python scrii un list comprehension: [x * 3 for x in numbers]. Se citește aproape ca o propoziție: lista nouă conține x * 3 pentru fiecare x din numbers.

Nu confunda asta cu funcția predefinită map() din Python, care face aceeași treabă primind un obiect funcție. Aici „map” înseamnă „aplică o expresie fiecărui element”.

Map cu un list comprehension

Comprehension-ul calculează expresia pentru fiecare element și adună rezultatele într-o listă nouă. Aici înmulțește fiecare număr cu 3.

Prompt
Scrie un program Python cu lista 1, 2, 3. Folosește un list comprehension ca să înmulțești fiecare număr cu 3 și afișează lista nouă.
Ieșire: program Python complet
Map with a list comprehension

Map cu indexul

Uneori contează și poziția unui element. enumerate îți dă atât indexul, cât și valoarea, așa că comprehension-ul le poate folosi pe amândouă. Aici fiecare valoare este înmulțită cu propriul ei index.

Prompt
Parcurge lista 1, 2, 3 cu enumerate, folosind atât indexul, cât și valoarea. Construiește o listă nouă în care fiecare element este value * index, apoi afișeaz-o.
Ieșire: program Python complet
Map with the index

Omiterea unor rezultate

Uneori anumite rezultate trebuie eliminate. În Python, o funcție poate returna None ca să spună „niciun rezultat”. Primul comprehension păstrează fiecare răspuns, inclusiv None. Al doilea are o parte if care păstrează doar rezultatele care nu sunt None.

Prompt
Scrie o funcție care returnează None pentru numărul 2 și de trei ori numărul în rest. Aplic-o pe lista 1, 2, 3 și afișează rezultatele brute, apoi afișează o listă filtrată, fără None.
Ieșire: program Python complet
Skip some results

Transformarea cheilor unui dicționar

Ca să schimbi cheile unui dicționar, construiește un dicționar nou cu un dict comprehension peste items(). Aici upper() transformă fiecare cheie în majuscule. Un dicționar își păstrează intrările în ordinea inserării, așa că rezultatul apare mereu în aceeași ordine.

Prompt
Pornește de la un dicționar de la „key1” la 1 și de la „key2” la 2. Construiește un dicționar nou cu aceleași valori, dar cu fiecare cheie transformată în majuscule cu upper(). Afișează dicționarul nou.
Ieșire: program Python complet
Transform dictionary keys

Transformarea valorilor unui dicționar

Ca să schimbi valorile, procedează la fel, dar păstrează cheia și calculează o valoare nouă. Aici fiecare valoare crește cu lungimea cheii ei: 1 + len("key1") este 5.

Prompt
Pornește de la un dicționar de la „key1” la 1 și de la „key2” la 2. Construiește un dicționar nou cu aceleași chei, în care fiecare valoare este valoarea veche plus lungimea cheii ei. Afișează dicționarul nou.
Ieșire: program Python complet
Transform dictionary values

Zip

Operația zip ia două liste și le împerechează elementele după poziție: primul cu primul, al doilea cu al doilea și așa mai departe. Rezultatul are atâtea perechi câte elemente are lista mai scurtă.

Python are o funcție predefinită zip. Ea returnează un iterator leneș de tupluri, așa că pune-o în list() când vrei să vezi sau să refolosești perechile.

Zip pentru două liste

zip împerechează o culoare cu un animal și se oprește singură la lista mai scurtă. Fiecare pereche este un tuplu, afișat între paranteze rotunde.

Prompt
Combină listele red, brown, grey și fox, bear, wolf element cu element cu funcția predefinită zip și afișează lista de perechi rezultată.
Ieșire: program Python complet
Zip two lists

Zip cu o transformare

Nu ai mereu nevoie de perechile propriu-zise. Aici un comprehension parcurge zip(colors, animals) și construiește o propoziție din fiecare pereche. capitalize() face ca prima literă a numelui animalului să fie majusculă.

Prompt
Combină listele red, brown, grey și fox, bear, wolf element cu element. Pentru fiecare pereche afișează o propoziție de forma „Animalul Fox are culoarea red”, cu prima literă a animalului scrisă cu majusculă.
Ieșire: program Python complet
Zip with a transformation

Despărțirea unei liste de perechi

Despărțirea (unzip) este operația inversă: o listă de perechi devine două colecții. Steluța din zip(*number_pairs) despachetează lista, astfel încât zip primește cele trei perechi ca argumente separate și regrupează primele lor părți și a doua lor parte. Cele două rezultate sunt tupluri.

Prompt
Pornește de la o listă de perechi: one cu 1, two cu 2, three cu 3. Desparte-o în cuvinte și numere cu zip(*pairs) și afișează fiecare rezultat pe câte o linie.
Ieșire: program Python complet
Unzip a list of pairs

Asocierea

Asocierea construiește un dicționar dintr-o listă. Fiecare element îți dă o cheie și o valoare. Un dicționar nu poate conține aceeași cheie de două ori, așa că, dacă două elemente produc aceeași cheie, câștigă cel de mai târziu.

În Python scrii un dict comprehension: {key: value for element in items}, unde cheia și valoarea sunt calculate din fiecare element.

Elementele ca chei

Elementul însuși devine cheia, iar din el se calculează o valoare. Aici cuvintele sunt chei, iar lungimile lor sunt valori.

Prompt
Construiește un dicționar din cuvintele one, two, three, în care fiecare cuvânt este o cheie, iar lungimea lui este valoarea. Afișează dicționarul.
Ieșire: program Python complet
Elements as keys

Elementele ca valori

Elementul devine valoarea, iar cheia se calculează din el. Aici cheia este prima literă, scrisă cu majusculă. Atât two, cât și three încep cu T, așa că three îl înlocuiește pe two, iar dicționarul are doar două intrări.

Prompt
Construiește un dicționar din cuvintele one, two, three, în care cheia este prima literă a cuvântului, scrisă cu majusculă, iar valoarea este cuvântul însuși. Afișează dicționarul și observă că „three” îl înlocuiește pe „two” la cheia T.
Ieșire: program Python complet
Elements as values

Calcularea atât a cheii, cât și a valorii

Poți calcula din element atât cheia, cât și valoarea. Aici cheia este prima literă, iar valoarea este lungimea cuvântului. Din nou, câștigă intrarea T de mai târziu.

Prompt
Construiește un dicționar din cuvintele one, two, three, în care cheia este prima literă scrisă cu majusculă, iar valoarea este lungimea cuvântului. Afișează dicționarul.
Ieșire: program Python complet
Compute both key and value

Cheia și valoarea dintr-un singur element

Uneori un singur element conține ambele părți. split() taie un nume complet la spații într-o listă de cuvinte, iar despachetarea dă nume celor două părți. Numele de familie devine cheia, iar prenumele devine valoarea.

Prompt
Pornește de la numele complete „Alice Adams” și „Brian Brown”. Împarte fiecare nume în cuvinte cu split() și construiește un dicționar de la numele de familie la prenume. Afișează dicționarul.
Ieșire: program Python complet
Key and value from one element

Aplatizarea

Aplatizarea transformă o colecție imbricată, cum ar fi o listă de liste, într-o singură listă simplă cu toate elementele în ordine.

Un comprehension poate avea două părți for: [n for inner in number_sets for n in inner]. Citește-le de la stânga la dreapta: pentru fiecare listă interioară, pentru fiecare element din ea, păstrează elementul.

Aplatizarea unei liste de liste

Comprehension-ul vizitează fiecare listă interioară și adună toate elementele ei în result. Două liste interioare de câte trei numere devin o singură listă de șase.

Prompt
Pornește de la o listă de liste: 1, 2, 3 și 4, 5, 6. Aplatizeaz-o într-o singură listă simplă cu un list comprehension imbricat, apoi afișeaz-o.
Ieșire: program Python complet
Flatten a list of lists

Aplatizarea valorilor din obiecte

Un flat map scoate mai întâi o listă din fiecare element, apoi unește toate aceste liste. Aici primul for parcurge containerele, iar al doilea parcurge c.values. Toate valorile din cele trei containere ajung într-o singură listă.

Prompt
Definește o clasă Container cu un atribut values, care este o listă de șiruri. Creează trei containere care conțin one, two, three; four, five; și six, seven, eight. Adună toate valorile lor într-o singură listă și afișeaz-o.
Ieșire: program Python complet
Flatten values from objects

Reprezentarea ca șir

Deseori vrei să afișezi o colecție ca text ușor de citit, de exemplu cu virgule între elemente.

În Python, șirul separator are metoda join: ", ".join(words) returnează un singur șir. join acceptă doar șiruri, așa că numerele trebuie convertite mai întâi, de exemplu cu str(n) într-un comprehension. Extrasele — un prefix, un sufix, o limită sau o transformare — se fac cu simpla concatenare de șiruri sau cu o feliere înainte de unire.

Unirea cu un separator

join pune ", " între cuvinte și returnează un singur șir. Observă că separatorul vine primul: este șirul pe care apelezi metoda.

Prompt
Unește cuvintele one, two, three într-un singur șir, cu „, ” între ele, folosind metoda join. Afișează șirul.
Ieșire: program Python complet
Join with a separator

Adăugarea unui prefix și a unui sufix

Un prefix și un sufix sunt doar text în jurul rezultatului unit. În Python le adaugi cu +.

Prompt
Unește cuvintele one, two, three cu „ | ” între ele, adaugă prefixul „început: ” și sufixul „: sfârșit” și afișează rezultatul.
Ieșire: program Python complet
Add a prefix and a postfix

Limitarea numărului de elemente

Pentru o listă lungă, poate vrei să afișezi doar primele câteva elemente. Felierea numbers[:10] ia primele 10, comprehension-ul transformă fiecare într-un șir cu str(n), iar "<...>" de la final arată că au fost tăiate și alte elemente.

Prompt
Creează o listă cu numerele de la 1 la 100. Unește doar primele 10 dintre ele cu „, ” și adaugă „<...>” la final, ca să arăți că lista a fost tăiată. Afișează rezultatul.
Ieșire: program Python complet
Limit the number of elements

Transformarea fiecărui element înainte de unire

Ca să schimbi fiecare element înainte de unire, construiește cu un comprehension o listă nouă de șiruri, apoi apelează join pe ea. Aici fiecare cuvânt devine "Element: " urmat de cuvântul scris cu majuscule.

Prompt
Transformă fiecare dintre cuvintele one, two, three în „Element: ” urmat de cuvântul scris cu majuscule. Unește rezultatele cu „, ” și afișează șirul.
Ieșire: program Python complet
Transform each element before joining