Python 3 Indexer und Sequenz entpacken (Substitution entpacken)

In Python 3 werden Indexer und Sequenzentpacken (Entpackungszuweisung) verwendet, um "Tupel" und "Liste" zu teilen. ) Kann verwendet werden. Letzteres ist der übliche Unterstrich "" zum Verwerfen von Variablen ("" Wiederverwendung) und Sternchen "*" zum Zuweisen zur Liste der verbleibenden iterierbaren Elemente. /ja/3/reference/simple_stmts.html#assignment-statements) ist möglich.

Neben dem Entpacken in Tupel in der Python 3-Dokumentation gilt das Konvertieren in Listen auch als Entpacken, wenn einige der Elemente auf der linken Seite als Variablen im Code verwendet werden können.

[a, b] = 0, 1
#Die obige Formel ist eine Konvertierung von Taple in Liste, aber das Listenelement b kann als Variable verwendet werden.
print(b)  # 1
b = 2
print(b)  # 2
print((a, b))  # (0, 2)

Voraussetzungen

Typen, die Indexer verwenden können und nicht

Typen, die vom Indexer verwendet werden können, sind Klassen mit abstrakten Methoden "index", und Typen, die nicht verwendet werden können, sind Typen ohne "index". Ersteres hat Typen, bei denen Indizes von Bedeutung sind, wie z. B. "Tupel" und "Liste", und letzteres sind Typen, bei denen Indizes bedeutungslos sind, wie "set" und "frozenset". Die Verwendung eines Indexers für letzteres führt zu einem "TypeError" -Fehler.

tuple1 = (0, 1, 2)
t0 = tuple1[0]
print(0)  # 0
t0, t1, t2 = tuple1
print((t0, t1, t2))  # (0, 1, 2)

set1 = {0, 1, 2}
# s0 = set1[0]  # TypeError 'set' object is not subscriptable
# print(s0)
s0, s1, s2 = set1
print((s0, s1, s2))  # (0, 1, 2)

Typen mit __index__ sind definiert als typing.SupportsIndex.

Typen, die das Entpacken von Sequenzen verwenden können und nicht (Substitution beim Entpacken)

Der Typ, der zum Entpacken der Sequenz verwendet werden kann, entspricht der Sequenz.. Dies ist ein Typ mit einer speziellen Methode "getitem" und einer speziellen Methode "len", und viele Typen wie "tuple", "list" und "set" sind anwendbar.

Typen, die Indexer und Sequenzentpackungen verwenden können und nicht

Typen, die sowohl für Indexer als auch für das Entpacken von Sequenzen verwendet werden können, sind die Typen "index", "getitem" und "len". "Tupel" und "Liste" fallen in diese Kategorie, "Set" und "Frozen Set" jedoch nicht.

Tupel teilen

Da das vorhergehende und folgende "(", ")" weggelassen werden kann, kann es im Fall der linken Seite (Entpackungsziel) der gleichen Anzahl so geschrieben werden, dass es geteilt und ersetzt wird.

Indexer


t = ("a", "b", "c")
a = t[0]
b = t[1]
c = t[2]
print((a, b, c))  # ('a', 'b', 'c')

Tupel → Tupel auspacken


# tuple→tuple
a, b, c = "a", "b", "c"
print((a, b, c))  # ('a', 'b', 'c')

# tuple→tuple
a, b, c = ("a", "b", "c")
print((a, b, c))  # ('a', 'b', 'c')

# tuple→tuple
(a, b, c) = ("a", "b", "c")
print((a, b, c))  # ('a', 'b', 'c')

#Weglassen unnötiger Variablen
(_, b, _) = ("a", "b", "c")
print((_, b, _))  # ('c', 'b', 'c')

#Setzen Sie den Rest in eine Liste
(a, *bc, _, e) = ("a", "b", "c", "d", "e")
print((a, bc, _, e))  # ('a', ['b', 'c'], 'd', 'e')

Tupel → Liste entpacken


# tuple→list
[a, b, c] = ("a", "b", "c")
print((a, b, c))  # ('a', 'b', 'c')

#Weglassen unnötiger Variablen
[_, b, _] = ("a", "b", "c")
print((_, b, _))  # ('c', 'b', 'c')

#Setzen Sie den Rest in eine Liste
[a, *bc, _, e] = ("a", "b", "c", "d", "e")
print((a, bc, _, e))  # ('a', ['b', 'c'], 'd', 'e')

Liste teilen

Es kann grundsätzlich genauso behandelt werden wie "Tupel". Das vorhergehende und folgende "[", "]" kann jedoch nicht weggelassen werden.

Indexer


t = ["a", "b", "c"]
a = t[0]
b = t[1]
c = t[2]
print((a, b, c))  # ('a', 'b', 'c')

Liste → Tupel auspacken


# list→tuple
a, b, c = ["a", "b", "c"]
print((a, b, c))  # ('a', 'b', 'c')

# list→tuple
(a, b, c) = ["a", "b", "c"]
print((a, b, c))  # ('a', 'b', 'c')

#Weglassen unnötiger Variablen
(_, b, _) = ["a", "b", "c"]
print((_, b, _))  # ('c', 'b', 'c')

#Setzen Sie den Rest in eine Liste
(a, *bc, _, e) = ["a", "b", "c", "d", "e"]
print((a, bc, _, e))  # ('a', ['b', 'c'], 'd', 'e')

Liste → Liste entpacken


# list→list
[a, b, c] = ["a", "b", "c"]
print((a, b, c))  # ('a', 'b', 'c')

#Weglassen unnötiger Variablen
[_, b, _] = ["a", "b", "c"]
print((_, b, _))  # ('c', 'b', 'c')

#Setzen Sie den Rest in eine Liste
[a, *bc, _, e] = ["a", "b", "c", "d", "e"]
print((a, bc, _, e))  # ('a', ['b', 'c'], 'd', 'e')

Set teilen

Indexer wird nicht unterstützt. Beim Auspacken in einen Tipp oder eine Liste kann die Bestellung nicht garantiert werden.

Set auspacken


# set→tuple
#Die Bestellung ist nicht garantiert.
a, b, c = {"a", "b", "c"}
print((a, b, c))  # ('a', 'b', 'c')Jede Art von

# set→list
#Die Bestellung ist nicht garantiert.
[a, b, c] = {"a", "b", "c"}
print((a, b, c))  # ('a', 'b', 'c')Jede Art von

#set → set (kann nicht)
# {a, b, c} = {"a", "b", "c"}
# print((a, b, c))  # ('a', 'c', 'b')

Beispiel

Recommended Posts

Python 3 Indexer und Sequenz entpacken (Substitution entpacken)
Python> Tupel> Tupel entpacken
Python- und Numpy-Tipps
[Python] Pip und Wheel
Fibonacci-Sequenz mit Python
Python Iterator und Generator
Python-Pakete und -Module
Vue-Cli- und Python-Integration
Ruby, Python und Map
Python und Ruby teilen sich
Python asyncio und ContextVar
Wiederholung der Memorisierung und dynamische Planungsmethode, bekannt aus der Python Fibonacci-Sequenz
Programmieren mit Python und Tkinter
Ver- und Entschlüsselung mit Python
Python: Klassen- und Instanzvariablen
3-3, Python-Zeichenfolge und Zeichencode
Python 2-Serie und 3-Serie (Anaconda Edition)
Python und Hardware-Verwenden von RS232C mit Python-
Python auf Ruby und wütend Ruby auf Python
Python Real Number Division (/) und Integer Division (//)
Installieren Sie Python und Flask (Windows 10)
Informationen zu Python-Objekten und -Klassen
Informationen zu Python-Variablen und -Objekten
[Python] Verwenden Sie eine Zeichenfolgenfolge
Apache mod_auth_tkt und Python AuthTkt
Å (Ongustorome) und NFC @ Python
Lernen Sie Python-Pakete und -Module kennen
# 2 [python3] Trennung und Kommentar aus
Ich habe Java und Python verglichen!
Flache Python-Kopie und tiefe Kopie
Über Python, len () und randint ()
Informationen zu Python-Datums- und Zeitzone
Installieren Sie Python 3.7 und Django 3.0 (CentOS)
Python-Umgebungskonstruktion und TensorFlow
Python-Klassen- und Instanzvariablen
Ruby- und Python-Syntax ~ branch ~
[Python] Python und Sicherheit - is Was ist Python?
Stapel und Warteschlange in Python
Python-Metaklasse und SQLalchemie deklarativ
Implementierung von Fibonacci und Primzahlen (Python)
Python-Grundlagen: Bedingungen und Iterationen
Python-Bitoperator und logische Summe
Python-Debug- und Testmodul
Python-Liste und Tapples und Kommas
Python-Variablen und Objekt-IDs
Python-Listeneinschlussnotation und Generator
Über Python und reguläre Ausdrücke
Python mit Pyenv und Venv
Unittest und CI in Python
Maxout Beschreibung und Implementierung (Python)
[Python] Quotient und Überschuss erhalten
Python 3 Sortier- und Vergleichsfunktionen
[Python] Suche nach Tiefenpriorität und Suche nach Breitenpriorität
Identität und Äquivalenz: ist und == in Python
Quellinstallation und Installation von Python
Python oder und und Operatorfalle
Fordern Sie Python3 und Selenium Webdriver heraus
Informationen zu Python- und Betriebssystemoperationen
Funktionen höherer Ordnung und Einschlussnotation in Python