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
, list
of 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 l
omzetten 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 tuple
echter opnieuw hebt gedefinieerd als een tuple in plaats van het type
tuple
:
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 tuple
herstellen 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 tuple
is een object
van het type tuple
nu…
Het is niet langer een type
en daarom is het niet meer Callable
.
Never
ingebouwde 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.5
het volgende doen:
t = *l, # or t = (*l,)
kort, een bitsneller maar lijdt waarschijnlijk aan leesbaarheid.
Dit pakt in wezen de lijst l
uit 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 tuple
zou 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