[Python] Ich möchte aus einer verschachtelten Liste einen Taple machen

Es ist üblich, eine Liste zu einem Tupel zu machen und umgekehrt.

Allgemeine Methode

Es ist üblich, die integrierten Funktionen "Liste" und "Tupel" zu verwenden.

l = [0, 1, 2]
t = tuple(l)
print(t)
(0, 1, 2)

Das Problem mit dieser Methode

Wenn die Liste jedoch verschachtelt ist, wird nur auf die flachste Hierarchie getippt.

l = [[0, 1, 2], [3, 4, 5, 6, 7], 8, 9]
t = tuple(l)
print(t) # ((0, 1, 2), (3, 4, 5, 6, 7), 8, 9)Ich möchte, dass Du
([0, 1, 2], [3, 4, 5, 6, 7], 8, 9)

Es ist scharf.

Eine Funktion, die eine verschachtelte Liste intern verknüpft

Machen wir es zu einem Full-Level-Taple, während wir es rekursiv aufrufen.

def list_to_tuple(l):
    return tuple(list_to_tuple(e) if isinstance(e, list) else e for e in l)
l = [[0, 1, 2], [3, 4, 5, 6, 7], 8, 9]
t = list_to_tuple(l)
print(t)
((0, 1, 2), (3, 4, 5, 6, 7), 8, 9)

Ich habs gemacht.

Originalmaterial und sein Vergleich

Eigentlich ist dieser Artikel [hier](https://blog.ttk1.net/2016/05/20/python%E3%81%A7%E5%85%A5%E3%82%8C%E5%AD%90% E6% A7% 8B% E9% 80% A0% E3% 81% AElist% E3% 82% 92tuple% E3% 81% AB% E5% A4% 89% E6% 8F% 9B% E3% 81% 97% E3% 81% 9F% E3% 81% 84 /) Pakuri. ~~ Ist es dir nicht peinlich ~~

Der Unterschied besteht darin, dass der Teil, der die for-Anweisung und den Zuweisungsoperator dort verwendet hat, jetzt enthalten ist.

Für Aussagen, die sich ehrlich wiederholen, ruft die Einschlussnotation einen dedizierten Prozess auf, der die Ausführungszeit verkürzt (Referenz).

def list_to_tuple_orig(_list):
    t = ()
    for e in _list:
        if isinstance(e,list):
            t += (list_to_tuple(e),)
        else:
            t += (e,)
    return t
l = list(range(10000))
%timeit t = list_to_tuple_orig(l)
%timeit t = list_to_tuple(l)
%timeit t = tuple(l)
92.7 ms ± 576 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
877 µs ± 3.31 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
19.6 µs ± 47.3 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

Es ist ungefähr 100 mal schneller. Es ist eine große Niederlage für eingebaute Funktionen.

Recommended Posts

[Python] Ich möchte aus einer verschachtelten Liste einen Taple machen
Ich möchte ein Spiel mit Python machen
Ich möchte eine schöne Ergänzung zu input () in Python hinzufügen
Ich möchte eine Python-Umgebung erstellen
[Einführung] Ich möchte mit Python einen Mastodon-Bot erstellen! 【Anfänger】
Ich möchte eine Parameterliste aus CloudFormation-Code (yaml) erstellen.
Ich möchte Matplotlib zu einem dunklen Thema machen
Ich möchte mit Python ein Fenster erstellen
Ich möchte verschachtelte Dicts in Python zusammenführen
Ich möchte C ++ - Code aus Python-Code erstellen!
Ich möchte mit Python in eine Datei schreiben
Ich möchte eine Webanwendung mit React und Python Flask erstellen
Ich möchte eine Variable in einen Python-String einbetten
Ich möchte Timeout einfach in Python implementieren
Ich möchte einen Python-Generator viele Male iterieren
Ich möchte schnell UUID generieren (Gedenknotiz) ~ Python Edition ~
Ich möchte in Python schreiben! (2) Schreiben wir einen Test
Ich möchte eine Datei mit Python zufällig testen
Ich möchte mit einem Roboter in Python arbeiten.
Ich möchte einen Quantencomputer mit Python betreiben
Python / Machen Sie ein Diktat aus einer Liste.
Ich möchte mit Python debuggen
[Python] So erstellen Sie eine Liste von Zeichenfolgen Zeichen für Zeichen
Ich möchte einen Blog-Editor mit dem Administrator von Django erstellen
[Python] Ich möchte einen gemeinsamen Satz zwischen numpy erhalten
Ich möchte viele Prozesse von Python aus starten
Ich möchte ein Klickmakro mit pyautogui (Wunsch) erstellen.
Ich möchte ein Klickmakro mit pyautogui (Outlook) erstellen.
Ich möchte eine Nachricht von Python an LINE Bot senden
Ich möchte den Wörterbuchtyp in der Liste eindeutig machen
Ich habe eine Stoppuhr mit tkinter mit Python gemacht
[Python] Ich möchte nur den Index verwenden, wenn ich eine Liste mit einer for-Anweisung schleife
[5.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
Ich möchte einen Platzhalter verwenden, den ich mit Python entfernen möchte
Ich möchte in der Einschlussnotation drucken
[2nd] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
[Python] So konvertieren Sie eine zweidimensionale Liste in eine eindimensionale Liste
Ich habe versucht, mit Python einen regulären Ausdruck für "Betrag" zu erstellen
[Python] Ich habe versucht, eine stabile Sortierung zu implementieren
Ich habe versucht, mit Python einen regulären Ausdruck von "Zeit" zu erstellen
[3.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
Ich möchte ein Glas aus Python verwenden
Ich habe versucht, mit Python eine Liste von Primzahlen zu erstellen
Ich habe versucht, mit Python einen regulären Ausdruck von "Datum" zu erstellen
Ich möchte den vollständigen Text mit elasticsearch + python durchsuchen
Ich möchte Protokolle mit Python analysieren
Python> Tupel in Liste konvertieren> aList = Liste (pi_tuple)
Ich möchte mit aws mit Python spielen
Ich habe versucht, mit Selenium und Python einen regelmäßigen Ausführungsprozess durchzuführen
Ich habe versucht, mit Python eine 2-Kanal-Post-Benachrichtigungsanwendung zu erstellen
Ich möchte ein Automatisierungsprogramm erstellen!
Ich habe versucht, eine ToDo-App mit einer Flasche mit Python zu erstellen
[4.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
Ich habe eine Web-API erstellt
[1.] Ich habe versucht, mit Python ein bestimmtes Authenticator-ähnliches Tool zu erstellen
Eine Geschichte, die ich machen wollte, als ich eine Liste von Lernsitzungen mit Python bekam
Ich möchte einen Sprachwechsler mit Python und SPTK in Bezug auf eine berühmte Site erstellen
[Einführung in Python] Was ist der Unterschied zwischen einer Liste und einem Taple?
[Python-Memo] Ich möchte eine zweistellige Hexadezimalzahl aus einer Dezimalzahl erhalten
Ich möchte eine in Python in PDF konvertierte Tabelle wieder in CSV konvertieren
Ich habe versucht, mit Raspeye 4 (Python Edition) ein signalähnliches Signal zu erzeugen.