Rozpakowywanie (rozwijanie i przypisywanie do wielu zmiennych) tupli i list w Pythonie

Biznes

W Pythonie elementy krotki lub listy mogą być interpretowane i przypisywane do wielu zmiennych. Nazywa się to rozpakowywaniem sekwencji lub rozpakowanym przypisywaniem.

Opisano tu następujące szczegóły.

  • Podstawy rozpakowywania krotek i list
  • Zagnieżdżone krotki, nierozpakowane listy
  • Rozpakowywanie za pomocą podkreślników:_
  • Rozpakowywanie za pomocą gwiazdek:*

Informacje na temat używania gwiazdek do rozwijania i przekazywania krotek, list i słowników jako argumentów funkcji można znaleźć w poniższym artykule.

Podstawy rozpakowywania krotek i list

Gdy zmienne są zapisane po lewej stronie, oddzielone przecinkami, każdej zmiennej przypisany jest element krotki lub listy po prawej stronie. Jest to takie samo zarówno dla krotek, jak i list (poniższe przykłady są zapisane w formie krotek).

t = (0, 1, 2)

a, b, c = t

print(a)
print(b)
print(c)
# 0
# 1
# 2

l = [0, 1, 2]

a, b, c = l

print(a)
print(b)
print(c)
# 0
# 1
# 2

Zauważ, że ponieważ w krotkach można pominąć nawiasy okrągłe, można tego użyć do przypisania wielu wartości wielu zmiennym w jednym wierszu, jak poniżej.

a, b = 0, 1

print(a)
print(b)
# 0
# 1

Jeśli liczba zmiennych nie jest równa liczbie elementów, wystąpi błąd.

# a, b = t
# ValueError: too many values to unpack (expected 2)

# a, b, c, d = t
# ValueError: not enough values to unpack (expected 4, got 3)

Jeśli liczba zmiennych jest mniejsza niż liczba elementów, pozostałe elementy można przypisać jako listę, dodając gwiazdkę do nazwy zmiennej (patrz poniżej).

Zagnieżdżone krotki, nierozpakowane listy

Zagnieżdżone krotki i listy również można rozpakować. Jeśli chcesz rozpakować również ich zawartość, zamknij zmienną w jednym z następujących symboli

  • ()
  • []
t = (0, 1, (2, 3, 4))

a, b, c = t

print(a)
print(b)
print(c)
# 0
# 1
# (2, 3, 4)

print(type(c))
# <class 'tuple'>

a, b, (c, d, e) = t

print(a)
print(b)
print(c)
print(d)
print(e)
# 0
# 1
# 2
# 3
# 4

Rozpakowany z _underscore_.

W Pythonie, nie tylko rozpakowane, wartości, które nie są potrzebne, są konwencjonalnie przypisywane do znaku podkreślenia (underscore) _. Nie ma to żadnego specjalnego znaczenia gramatycznego; są one po prostu przypisywane do zmiennej o nazwie _.

t = (0, 1, 2)

a, b, _ = t

print(a)
print(b)
print(_)
# 0
# 1
# 2

Rozpakowywanie za pomocą gwiazdek

Jeśli liczba zmiennych jest mniejsza niż liczba elementów, gwiazdka w nazwie zmiennej spowoduje, że elementy zostaną przypisane razem jako lista.

Ta składnia została wprowadzona od Pythona 3 i nie jest dostępna w Pythonie 2.

Elementy są przypisywane od początku i od końca do zmiennych bez gwiazdek, a pozostałe elementy są przypisywane jako lista do zmiennych z gwiazdkami.

t = (0, 1, 2, 3, 4)

a, b, *c = t

print(a)
print(b)
print(c)
# 0
# 1
# [2, 3, 4]

print(type(c))
# <class 'list'>

a, *b, c = t

print(a)
print(b)
print(c)
# 0
# [1, 2, 3]
# 4

*a, b, c = t

print(a)
print(b)
print(c)
# [0, 1, 2]
# 3
# 4

Na przykład, jeśli chcesz przypisać do zmiennej tylko dwa pierwsze elementy krotki lub listy, możesz użyć podkreślenia dla tych części, które nie są potrzebne.

a, b, *_ = t

print(a)
print(b)
print(_)
# 0
# 1
# [2, 3, 4]

Można to również zapisać w następujący sposób

a, b = t[0], t[1]

print(a)
print(b)
# 0
# 1

Może być dołączona tylko jedna gwiazdka. Jeśli gwiazdką oznaczonych jest wiele zmiennych, wystąpi błąd SyntaxError, ponieważ nie można określić, ile elementów jest przypisanych do każdej zmiennej.

# *a, b, *c = t
# SyntaxError: two starred expressions in assignment

Należy zauważyć, że nawet pojedynczy element przypisany do zmiennej oznaczonej gwiazdką jest przypisywany jako lista.

t = (0, 1, 2)

a, b, *c = t

print(a)
print(b)
print(c)
# 0
# 1
# [2]

print(type(c))
# <class 'list'>

Jeśli nie ma żadnych dodatkowych elementów, przypisywana jest pusta lista.

a, b, c, *d = t

print(a)
print(b)
print(c)
print(d)
# 0
# 1
# 2
# []
Copied title and URL