Lijst converteren naar tuple in Python

Ik probeer een lijst naar een tuple te converteren.

De meeste oplossingen op Google bieden de volgende code:

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

De code resulteert echter in een foutmelding wanneer ik deze uitvoer:

TypeError: ‘tuple’ object kan niet worden aangeroepen

Hoe kan ik dit probleem oplossen?


Antwoord 1, autoriteit 100%

Het zou goed moeten werken. Gebruik geen tuple, listof andere speciale namen als variabelenaam. Dit is waarschijnlijk de oorzaak van uw probleem.

>>> l = [4,5,6]
>>> tuple(l)
(4, 5, 6)
>>> tuple = 'whoops'   # Don't do this
>>> tuple(l)
TypeError: 'tuple' object is not callable

Antwoord 2, autoriteit 13%

Uitbreiding van de opmerking van eumiro, normaal gesproken zal tuple(l)een lijst lomzetten in een tuple:

In [1]: l = [4,5,6]
In [2]: tuple
Out[2]: <type 'tuple'>
In [3]: tuple(l)
Out[3]: (4, 5, 6)

Als je tupleechter opnieuw hebt gedefinieerd als een tuple in plaats van het typetuple:

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

dan krijg je een TypeError omdat de tuple zelf niet kan worden aangeroepen:

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

Je kunt de originele definitie voor tupleherstellen door je tolk af te sluiten en opnieuw te starten, of (met dank aan @glglgl):

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

Antwoord 3, autoriteit 3%

Misschien heb je zoiets als dit gedaan:

>>> 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)

Dit is het probleem… Aangezien je eerder een tuple-variabele hebt gebruikt om een tuple (45, 34)vast te houden… Dus nu tupleis een objectvan het type tuplenu…

Het is niet langer een typeen daarom is het niet meer Callable.

Neveringebouwde typen gebruiken als variabelenaam… Je hebt een andere naam die je kunt gebruiken. Gebruik in plaats daarvan een willekeurige naam voor uw variabele…


Antwoord 4, autoriteit 3%

Als u nog een alternatief voor tuple(l)wilt toevoegen, kunt u vanaf Python >= 3.5het volgende doen:

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

kort, een bitsneller maar lijdt waarschijnlijk aan leesbaarheid.

Dit pakt in wezen de lijst luit in een letterlijke tuple die is gemaakt vanwege de aanwezigheid van de enkele komma ,.


Ps: de fout die je ontvangt is te wijten aan het maskeren van de naam tuple, dwz dat je de naam tuple ergens hebt toegewezen, bijv. tuple = (1, 2, 3).

Met behulp van del tuplezou je klaar moeten zijn om te gaan.


Antwoord 5

Ik vind veel antwoorden up-to-date en correct beantwoord, maar zal iets nieuws toevoegen aan de stapel antwoorden.

In python zijn er oneindig veel manieren om dit te doen,
hier zijn enkele voorbeelden
Normale manier

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

slimme manier

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

Onthoud dat tuple onveranderlijk is en wordt gebruikt om iets waardevols op te slaan.
Wachtwoord, sleutel of hashes worden bijvoorbeeld opgeslagen in tupels of woordenboeken.
Als een mes nodig is, waarom dan een zwaard gebruiken om appels te snijden.
Gebruik het verstandig, het zal uw programma ook efficiënt maken.


Antwoord 6

l1 = []   #Empty list is given
l1 = tuple(l1)   #Through the type casting method we can convert list into tuple
print(type(l1))   #Now this show class of tuple

Other episodes