696 Stimmen

Liste in Tupel umwandeln in Python

Ich versuche, eine Liste in ein Tupel zu konvertieren.

Die meisten Lösungen auf Google bieten den folgenden Code an:

l = [4,5,6]
tuple(l)

Der Code führt jedoch zu einer Fehlermeldung, wenn ich ihn ausführe:

TypeError: Objekt 'tuple' ist nicht aufrufbar

Wie kann ich dieses Problem beheben?

1015voto

root Punkte 73542

Das sollte gut funktionieren. Verwenden Sie nicht tuple , list oder andere spezielle Namen als Variablennamen verwenden. Das ist wahrscheinlich die Ursache für Ihr Problem.

>>> l = [4,5,6]
>>> tuple(l)
(4, 5, 6)

>>> tuple = 'whoops'   # Don't do this
>>> tuple(l)
TypeError: 'tuple' object is not callable

123voto

unutbu Punkte 769083

In Erweiterung von eumiros Kommentar, normalerweise tuple(l) konvertiert eine Liste l in ein Tupel:

In [1]: l = [4,5,6]

In [2]: tuple
Out[2]: <type 'tuple'>

In [3]: tuple(l)
Out[3]: (4, 5, 6)

Wenn Sie jedoch neu definiert haben tuple ein Tupel zu sein, anstatt die type tuple :

In [4]: tuple = tuple(l)

In [5]: tuple
Out[5]: (4, 5, 6)

dann erhalten Sie einen TypeError, da das Tupel selbst nicht aufrufbar ist:

In [6]: tuple(l)
TypeError: 'tuple' object is not callable

Sie können die ursprüngliche Definition wiederherstellen für tuple durch Beenden und Neustarten des Interpreters oder (dank @glglgl):

In [6]: del tuple

In [7]: tuple
Out[7]: <type 'tuple'>

38voto

Um eine weitere Alternative zu tuple(l) ab Python >= 3.5 können Sie tun:

t = *l,  # or t = (*l,) 

kurz, ein bit schneller, aber wahrscheinlich leidet die Lesbarkeit darunter.

Damit wird die Liste im Wesentlichen ausgepackt l in einem Tupel-Literal, das durch das Vorhandensein des einzelnen Kommas entsteht , .


P.s: Der Fehler, den Sie erhalten, ist auf die Maskierung des Namens zurückzuführen tuple d.h. Sie haben das Namenstupel irgendwo zugewiesen, z.B. tuple = (1, 2, 3) .

使用する del tuple sollten Sie startklar sein.

30voto

Rohit Jain Punkte 207783

Vielleicht haben Sie etwas Ähnliches getan:

>>> tuple = 45, 34  # You used `tuple` as a variable here
>>> tuple
(45, 34)
>>> l = [4, 5, 6]
>>> tuple(l)   # Will try to invoke the variable `tuple` rather than tuple type.

Traceback (most recent call last):
  File "<pyshell#10>", line 1, in <module>
    tuple(l)
TypeError: 'tuple' object is not callable
>>>
>>> del tuple  # You can delete the object tuple created earlier to make it work
>>> tuple(l)
(4, 5, 6)

Hier ist das Problem... Da Sie eine tuple Variable zur Aufnahme einer tuple (45, 34) früher... Also, jetzt tuple ist ein object vom Typ tuple Nun...

Es ist nicht mehr ein type und daher ist es nicht mehr Callable .

Never beliebige eingebaute Typen als Variablennamen verwenden... Sie können auch einen anderen Namen verwenden. Verwenden Sie stattdessen einen beliebigen Namen für Ihre Variable...

5voto

TheExorcist Punkte 1794

Ich finde viele Antworten aktuell und richtig beantwortet, werde aber dem Stapel der Antworten etwas Neues hinzufügen.

In Python gibt es unendlich viele Möglichkeiten, dies zu tun, hier sind einige Beispiele
Normaler Weg

>>> l= [1,2,"stackoverflow","python"]
>>> l
[1, 2, 'stackoverflow', 'python']
>>> tup = tuple(l)
>>> type(tup)
<type 'tuple'>
>>> tup
(1, 2, 'stackoverflow', 'python')

intelligente Art

>>>tuple(item for item in l)
(1, 2, 'stackoverflow', 'python')

Denken Sie daran, dass Tupel unveränderlich ist und zum Speichern von etwas Wertvollem verwendet wird. Zum Beispiel Passwort, Schlüssel oder Hashes werden in Tupeln oder Wörterbüchern gespeichert. Wenn man ein Messer braucht, warum sollte man ein Schwert benutzen, um Äpfel zu schneiden. Verwenden Sie es mit Bedacht, es wird auch Ihr Programm effizient machen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X