Udpakning (udvidelse og tildeling til flere variabler) af tupler og lister i Python

Forretning

I Python kan elementer i en tupel eller liste udvides og tildeles flere variabler. Dette kaldes sequence unpacking eller unpacked assignment.

Følgende oplysninger beskrives her.

  • Grundlæggende udpakning af tupler og lister
  • Tupler, udpakkede lister
  • Udpakning med understregninger:_
  • Udpakning med stjernetegn:*

Se følgende artikel for oplysninger om brug af stjerner til at udvide og videregive tupler, lister og ordbøger som funktionsargumenter.

Grundlæggende udpakning af tupler og lister

Når variabler skrives på venstre side, adskilt af kommaer, tildeles hver variabel et element i tuplen eller listen på højre side. Det er det samme for både tupler og lister (de følgende eksempler er skrevet i tupelform).

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

Bemærk, at da tupler kan udelade runde parenteser, kan dette bruges til at tildele flere værdier til flere variabler på en enkelt linje på følgende måde.

a, b = 0, 1

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

Hvis antallet af variabler ikke stemmer overens med antallet af elementer, opstår der en fejl.

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

Hvis antallet af variabler er mindre end antallet af elementer, kan de resterende elementer tildeles som en liste ved at tilføje en asterisk til variabelnavnet (se nedenfor).

Tupler, udpakkede lister

Tupler og lister med indlejrede tupler kan også pakkes ud. Hvis du også ønsker at udpakke indholdet, skal du omslutte variablen med en af følgende

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

Udpakket med _underscore_.

I Python, ikke kun udpakket, tildeles værdier, der ikke er nødvendige, konventionelt til understregningen (understregning) _. Der er ingen særlig grammatisk betydning; de tildeles simpelthen til en variabel med navnet _.

t = (0, 1, 2)

a, b, _ = t

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

Udpakning med stjernetegn

Hvis antallet af variabler er mindre end antallet af elementer, vil en asterisk i variabelnavnet medføre, at elementerne tildeles samlet som en liste.

Denne syntaks er blevet implementeret siden Python 3 og er ikke tilgængelig i Python 2.

Elementerne tildeles fra begyndelsen og slutningen til de variabler uden stjerner, og de resterende elementer tildeles som en liste til de variabler med stjerner.

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

Hvis du f.eks. kun vil tildele de to første elementer i en tupel eller liste til en variabel, kan du bruge ovenstående understregning for de dele, der ikke er nødvendige.

a, b, *_ = t

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

Det samme kan også skrives på følgende måde

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

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

Der kan kun vedhæftes én asterisk. Hvis der er flere variabler markeret med en asterisk, opstår der en SyntaxError-fejl, fordi det ikke er muligt at bestemme, hvor mange elementer der er tildelt hver enkelt variabel.

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

Bemærk, at selv et enkelt element, der tildeles en variabel markeret med en asterisk, tildeles som en liste.

t = (0, 1, 2)

a, b, *c = t

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

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

Hvis der ikke er nogen ekstra elementer, tildeles en tom liste.

a, b, c, *d = t

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