Im folgenden Beispiel würde ich erwarten, dass alle Elemente Tupel sind. Warum wird ein Tupel in eine Zeichenfolge konvertiert, wenn es nur eine einzelne Zeichenfolge enthält?
>>> a = [('a'), ('b'), ('c', 'd')]
>>> a
['a', 'b', ('c', 'd')]
>>>
>>> for elem in a:
... print type(elem)
...
<type 'str'>
<type 'str'>
<type 'tuple'>
('a')
bewertet gerade zu'a'
,
:a = 1, 2, 3; print a
()
, das nur aus zwei Klammern besteht.False
- fast alles, wofür ein leeres Tupel gut ist (wenn Sie sehen, was ich meine).Antworten:
Weil diese ersten beiden Elemente keine Tupel sind; Sie sind nur Saiten. Die Klammern machen sie nicht automatisch zu Tupeln. Sie müssen nach der Zeichenfolge ein Komma einfügen, um Python anzuzeigen, dass es sich um ein Tupel handeln soll.
Fügen Sie hier Kommas hinzu, um Ihren Beispielcode zu korrigieren:
Aus den Python-Dokumenten :
Wenn Sie die nachfolgende Kommasyntax wirklich hassen, besteht eine Problemumgehung darin, a
list
an dietuple()
Funktion zu übergeben:quelle
tuple
akzeptiert eine iterable , die eine Zeichenfolge ist (iteriert über Zeichen). Wenn Sie darauf bestehen, das nachfolgende Komma nicht zu verwenden, erstellen Sie eine Zwischenliste :tuple(['abc'])
.Ihre ersten beiden Beispiele sind keine Tupel, sondern Zeichenfolgen. Einzelelement-Tupel erfordern ein nachfolgendes Komma, wie in:
quelle
('a')
ist kein Tupel, sondern nur eine Zeichenfolge.Sie müssen am Ende ein zusätzliches Komma hinzufügen, damit
python
sie wie folgt angezeigt werdentuple
: -quelle