it-swarm.com.de

Liste in Tupel in Python konvertieren

Ich versuche, eine Liste in ein Tupel umzuwandeln.

Wenn ich es google, finde ich viele Antworten ähnlich wie:

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

Aber wenn ich das tue, bekomme ich diese Fehlermeldung:

TypeError: Das Tuple-Objekt kann nicht aufgerufen werden

Wie kann ich dieses Problem beheben?

510
LynnH

Es sollte gut funktionieren. Verwenden Sie nicht Tuple, list oder andere spezielle Namen als Variablennamen. Es ist wahrscheinlich, was dein Problem verursacht.

>>> l = [4,5,6]
>>> Tuple(l)
(4, 5, 6)
761
root

Wenn Sie den Kommentar von eumiro erweitern, konvertiert Tuple(l) normalerweise eine Liste l in ein Tuple:

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 Tuple neu definiert haben, um ein Tupel statt des typeTuple zu sein:

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 für Tuple wiederherstellen, indem Sie Ihren Interpreter beenden und neu starten, oder (danke an @glglgl):

In [6]: del Tuple

In [7]: Tuple
Out[7]: <type 'Tuple'>
106
unutbu

Möglicherweise haben Sie Folgendes 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 verwendet haben, um eine Tuple (45, 34) zu speichern, ist Tuple jetzt eine object vom Typ Tuple jetzt...

Es ist kein type mehr und daher kein Callable mehr.

Never Verwenden Sie alle integrierten Typen als Variablennamen ... Sie müssen einen anderen Namen verwenden. Verwenden Sie stattdessen einen beliebigen Namen für Ihre Variable ...

27
Rohit Jain

Um eine weitere Alternative zu Tuple(l) hinzuzufügen, können Sie ab Python> = 3.5 Folgendes tun:

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

kurz, ein Bit schneller, leidet aber wahrscheinlich an der Lesbarkeit.

Dies entpackt im Wesentlichen die Liste l in ein Tupel-Literal, das aufgrund des Vorhandenseins des einzelnen Kommas , erstellt wird.


PS: Der Fehler, den Sie erhalten, ist auf die Maskierung des Namens Tuple zurückzuführen, d. H. Sie haben den Namen Tuple irgendwo zugewiesen, z. B. Tuple = (1, 2, 3).

Wenn Sie del Tuple verwenden, sollten Sie bereit sein.

Ich finde viele Antworten auf dem neuesten Stand und richtig beantwortet, füge aber dem Stapel von Antworten etwas Neues hinzu.

In python gibt es unendlich viele Möglichkeiten, dies zu tun. Hier sind einige Beispiele
Normalerweise

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

kluger Weg

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

Denken Sie daran, Tuple ist unveränderlich und dient zur Speicherung von Wertgegenständen. Zum Beispiel werden Passwort, Schlüssel oder Hashes in Tupeln oder Wörterbüchern gespeichert. Wenn Messer benötigt wird, warum man Schwert benutzt, um Äpfel zu schneiden. Verwenden Sie es mit Bedacht, es wird auch Ihr Programm effizienter machen.

6
TheExorcist