Salt la conținutul principal
Modulul 3 · Lecția 2 din 410/36 în curs~10 min
Lecții din modul (2/4)

Tuplele și despachetarea

Un tuplu este o secvență ordonată și imuabilă: odată creată, puteți nu-și mai schimba elementele. Este scris cu paranteze (chiar dacă ceea ce o defineste de fapt este virgula).

Crearea unui tuplu

Python
vuota = ()
una = (42,)             # ATTENZIONE: senza virgola, (42) è solo 42 fra parentesi
coords = (10, 20)
mista = ("Ada", 36, True)

Accesul prin indexare și feliere funcționează exact ca pentru liste: coords[0], coords[-1], mista[:2].

Când să folosiți un tuplu în loc de o listă

  • Când valoarea reprezintă o colecție fixă care nu trebuie să se modifice (coordonate, o dată ca (year, month, day), o versiune (1, 2, 3)).
  • Când trebuie să utilizați valoarea ca cheie de dicționar sau ca element al a set: pot fi folosite numai obiecte imuabile (hashable).
  • Când doriți să semnalați cititorului codului că aceea valoare este „înghețat”.

Dezambalarea: caracteristica care schimbă modul în care scrieți Python

Python
nome, anni = ("Ada", 36)
nome   # 'Ada'
anni   # 36

De asemenea, funcționează fără paranteze (virgula este cea care definește tuplu):

Python
x, y = 10, 20

Și permite schimbarea fără o variabilă temporară, un Python pur idiom:

Python
a, b = 1, 2
a, b = b, a
a, b   # (2, 1)

Despachetarea cu * (odihnă)

Când doriți să capturați „primul și restul” sau „primul, ultimul, mijlocul":

Python
primo, *resto = [1, 2, 3, 4, 5]
primo   # 1
resto   # [2, 3, 4, 5]

primo, *centro, ultimo = [1, 2, 3, 4, 5]
centro  # [2, 3, 4]

Aceasta se numește atribuire cu stea: steaua colectează tot ceea ce rămâne într-o listă.

Capcana tuplelor cu un singur element

(42) nu este un tuplu, este numărul 42 din paranteze. A face o tuplu cu un singur element aveți nevoie de virgula: (42,). Fără el, orice operațiune eșuează într-un mod confuz.

Python
x = (42)
type(x)   # <class 'int'>
x = (42,)
type(x)   # <class 'tuple'>

Tupluri cu un singur element

Pentru a crea un tuplu care conține un singur element, doar parantezele nu sunt suficiente: trebuie să inserați o virgulă finală, de exemplu t = (42,). Fără virgulă, Python tratează parantezele ca o simplă grupare matematică, creând un întreg simplu 42.

Încearcă

Exercițiu#python.m3.l2.e1
Încercări: 0Se încarcă…

Având în vedere `a = 1` și `b = 2`, schimbați valorile lor într-o singură linie (depachetarea tuplului) și evaluați tuplul (a, b).

Se încarcă editorul...
Afișează indiciu

a, b = b, a

Soluție disponibilă după 3 încercări

Exercițiu de revizuire

Exercițiu#python.m3.l2.e2
Încercări: 0Se încarcă…

Din lista `voti = [7, 5, 8, 6, 9]`, folosiți despachetarea pentru a extrage prima nota în `primo`, ultima în `ultimo` și pe cele rămase în `centro`. Evaluați `(primo, centro, ultimo)`.

Se încarcă editorul...
Afișează indiciu

primo, *centro, ultimo = voti → primo=7, centro=[5,8,6], ultimo=9.

Soluție disponibilă după 3 încercări

Provocare suplimentară

Exercițiu#python.m3.l2.e3
Încercări: 0Se încarcă…

Given the tuple `point = (4, 5, 6)`, use unpacking to assign the three values to the variables `x`, `y`, `z` respectively. Then, calculate the sum of `x`, `y`, and `z` and store it in `coord_sum`. Finally, evaluate `coord_sum`.

Se încarcă editorul...
Afișează indiciu

Utilizați x, y, z = punct pentru a extrage cele trei coordonate într-o singură declarație.

Soluție disponibilă după 3 încercări