Das Rätsel der Singleton-Tupel und ihre stringartige Konvertierung
Wenn Sie ein Tupel mit einem einzelnen Element erstellen, können Sie erwarten, dass es sein Tupel behält Natur. In Python tritt jedoch ein eigenartiges Verhalten auf.
Das Problem:
Bedenken Sie den folgenden Code:
a = [('a'), ('b'), ('c', 'd')]
Überraschenderweise beim Drucken Wenn Sie den Typ jedes Elements in a angeben, erhalten Sie die folgende Ausgabe:
['a', 'b', ('c', 'd')] <type 'str'> <type 'str'> <type 'tuple'>
Warum tun die ersten beiden Elemente trotz Wenn sie in Klammern eingeschlossen sind, verhalten sie sich wie Zeichenfolgen statt wie Tupel?
Die Antwort:
Der Schlüssel liegt im Verständnis der Python-Syntax für Tupel. Klammern allein erzeugen kein Tupel mit einem einzelnen Element. Dazu müssen Sie nach dem Element ein Komma einfügen. Diese Unterscheidung wird unten veranschaulicht:
type(('a')) # A string type(('a',)) # A tuple
Um das Codebeispiel zu korrigieren, fügen Sie nach den Einzelelementzeichenfolgen Kommas ein:
a = [('a',), ('b',), ('c', 'd')]
Der Grund:
Laut der Python-Dokumentation haben leere Tupel und Tupel mit einem einzelnen Element einzigartige Syntaxanforderungen. Leere Tupel werden mit einem leeren Klammerpaar erstellt, während Tupel mit einem einzelnen Element einen Wert gefolgt von einem Komma erfordern.
Eine Umgehung:
Wenn Sie das finden Wenn das nachgestellte Komma ästhetisch unansprechend ist, können Sie ein Tupel mit einem einzelnen Element erstellen, indem Sie eine Liste an tuple() übergeben. Funktion:
x = tuple(['a'])
Das obige ist der detaillierte Inhalt vonWarum behandelt Python „('a')' als String und nicht als Tupel?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!