Packa upp (expandera och tilldela flera variabler) tupler och listor i Python

Företag

I Python kan element i en tupel eller lista expanderas och tilldelas flera variabler. Detta kallas för sekvensuppackning eller uppackad tilldelning.

Här beskrivs följande detaljer.

  • Uppackning av grunderna för tupler och listor
  • Nästade tupler, uppackade listor
  • Uppackning med understreckare:_
  • Uppackning med asterisker:*

I följande artikel finns information om hur du använder asterisker för att expandera och skicka tupler, listor och ordlistor som funktionsargument.

Uppackning av grunderna för tupler och listor

När variabler skrivs på vänster sida, separerade med kommatecken, tilldelas varje variabel ett element i tupeln eller listan på höger sida. Det är samma sak för både tupler och listor (följande exempel är skrivna 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

Observera att eftersom tupler kan utelämna runda parenteser kan detta användas för att tilldela flera värden till flera variabler på en enda rad enligt följande.

a, b = 0, 1

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

Om antalet variabler inte överensstämmer med antalet element uppstår ett fel.

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

Om antalet variabler är mindre än antalet element kan de återstående elementen tilldelas som en lista genom att lägga till en asterisk till variabelnamnet (se nedan).

Nästade tupler, uppackade listor

Nested tuples och listor kan också packas upp. Om du vill packa upp innehållet också, omsluter du variabeln med något av följande

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

Uppackad med _underscore_.

I Python, inte bara uppackade, tilldelas värden som inte behövs konventionellt till understrykningen (understrykning) _. Det finns ingen särskild grammatisk betydelse; de tilldelas helt enkelt en variabel som heter _.

t = (0, 1, 2)

a, b, _ = t

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

Uppackning med asterisker

Om antalet variabler är mindre än antalet element, kommer en asterisk i variabelnamnet att leda till att elementen tilldelas tillsammans som en lista.

Denna syntax har implementerats sedan Python 3 och finns inte i Python 2.

Elementen tilldelas från början och slutet till variablerna utan asterisk, och de återstående elementen tilldelas som en lista till variablerna med asterisk.

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

Om du till exempel bara vill tilldela de två första elementen i en tupel eller lista till en variabel kan du använda understrykningen ovan för de delar som inte behövs.

a, b, *_ = t

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

Samma sak kan också skrivas på följande sätt

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

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

Endast en asterisk kan bifogas. Om flera variabler är markerade med en asterisk uppstår ett SyntaxError-fel eftersom det inte går att avgöra hur många element som tilldelats varje variabel.

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

Observera att även ett enskilt element som tilldelas en variabel som är markerad med en asterisk tilldelas som en lista.

t = (0, 1, 2)

a, b, *c = t

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

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

Om det inte finns några extra element tilldelas en tom lista.

a, b, c, *d = t

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