Tupel und Listen in Python entpacken (erweitern und mehreren Variablen zuweisen)

Geschäft

In Python können die Elemente eines Tupels oder einer Liste erweitert und mehreren Variablen zugewiesen werden. Dies wird als Entpacken von Sequenzen oder ungepackte Zuweisung bezeichnet.

Die folgenden Details werden hier beschrieben.

  • Entpackungsgrundlagen für Tupel und Listen
  • Verschachtelte Tupel, ungepackte Auflistungen
  • Auspacken mit Unterstreichungen:_
  • Auspacken mit Sternchen:*

Im folgenden Artikel finden Sie Informationen zur Verwendung von Sternchen zum Expandieren und Übergeben von Tupeln, Listen und Wörterbüchern als Funktionsargumente.

Entpackungsgrundlagen für Tupel und Listen

Wenn Variablen auf der linken Seite durch Kommas getrennt geschrieben werden, wird jeder Variablen ein Element des Tupels oder der Liste auf der rechten Seite zugeordnet. Dies gilt sowohl für Tupel als auch für Listen (die folgenden Beispiele sind in Tupelform geschrieben).

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

Da bei Tupeln runde Klammern weggelassen werden können, lassen sich auf diese Weise mehreren Variablen in einer einzigen Zeile mehrere Werte zuweisen.

a, b = 0, 1

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

Wenn die Anzahl der Variablen nicht mit der Anzahl der Elemente übereinstimmt, tritt ein Fehler auf.

# 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)

Wenn die Anzahl der Variablen geringer ist als die Anzahl der Elemente, können die verbleibenden Elemente als Liste zugewiesen werden, indem ein Sternchen an den Variablennamen angehängt wird (siehe unten).

Verschachtelte Tupel, ungepackte Auflistungen

Verschachtelte Tupel und Listen können ebenfalls entpackt werden. Wenn Sie auch den Inhalt entpacken wollen, schließen Sie die Variable in eine der folgenden Formen ein

  • ()
  • []
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

Ausgepackt mit _underscore_.

In Python werden nicht nur ausgepackte, sondern auch nicht benötigte Werte üblicherweise mit dem Unterstrich _ versehen. Es gibt keine besondere grammatikalische Bedeutung; sie werden einfach einer Variablen namens _ zugewiesen.

t = (0, 1, 2)

a, b, _ = t

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

Auspacken mit Sternchen

Wenn die Anzahl der Variablen geringer ist als die Anzahl der Elemente, führt ein Sternchen im Variablennamen dazu, dass die Elemente zusammen als Liste zugewiesen werden.

Diese Syntax ist seit Python 3 implementiert und ist in Python 2 nicht verfügbar.

Die Elemente am Anfang und am Ende werden den Variablen ohne Sternchen zugewiesen, die restlichen Elemente werden als Liste den Variablen mit Sternchen zugewiesen.

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

Wenn Sie beispielsweise nur die ersten beiden Elemente eines Tupels oder einer Liste einer Variablen zuweisen möchten, können Sie den obigen Unterstrich für die Teile verwenden, die nicht benötigt werden.

a, b, *_ = t

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

Das Gleiche kann auch wie folgt geschrieben werden

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

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

Es kann nur ein Sternchen angehängt werden. Wenn mehrere Variablen mit einem Sternchen versehen sind, führt dies zu einem SyntaxError-Fehler, da nicht festgestellt werden kann, wie viele Elemente den einzelnen Variablen zugeordnet sind.

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

Beachten Sie, dass auch ein einzelnes Element, das einer mit einem Sternchen gekennzeichneten Variablen zugewiesen ist, als Liste zugewiesen wird.

t = (0, 1, 2)

a, b, *c = t

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

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

Gibt es keine zusätzlichen Elemente, wird eine leere Liste zugewiesen.

a, b, c, *d = t

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