Listeyi Python'da tuple'e dönüştür


544

Bir listeyi bir tuple dönüştürmeye çalışıyorum.

Google'daki çoğu çözüm aşağıdaki kodu sunar:

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

Ancak, ben çalıştırdığınızda kodu bir hata iletisi ile sonuçlanır:

TypeError: 'tuple' nesnesi çağrılabilir değil Bu sorunu nasıl düzeltebilirim?


78
Değişken adını daha tupleönce başka bir yere mi verdiniz ?
eumiro

18
Aşırı seçici olmamakla birlikte, muhtemelen 1'e benzerliğinden dolayı değişken bir isim olarak küçük "el" harfini kullanmamalısınız. Hatta "li" bile çok daha okunabilir.
Albert Rothman

Yanıtlar:


815

İyi çalışmalı. Kullanmayın tuple, listya da değişken adı gibi diğer özel isimler. Muhtemelen sorunun nedeni budur.

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

109

Eumiro'nun yorumuna genişleyerek, normalde tuple(l)bir listeyi bir tuple'a dönüştürür l:

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

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

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

Ancak, aşağıdakilerden tupleziyade bir grup olarak tanımladıysanız type tuple:

In [4]: tuple = tuple(l)

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

grubun kendisi çağrılabilir olmadığından bir TypeError alırsınız:

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

tupleTercümanı bırakıp yeniden başlatarak veya (@glglgl sayesinde) için orijinal tanımı kurtarabilirsiniz :

In [6]: del tuple

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

29

Bunun gibi bir şey yapmış olabilirsiniz:

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

Sorun şu ... Daha önce tupletutmak için bir değişken kullandığınız için tuple (45, 34)... Şimdi, şimdi tuplebir objecttür tuple...

Artık bir typeve dolayısıyla artık değil Callable.

Neveryerleşik adınızı değişken adınız olarak kullanın ... Kullanacağınız başka bir adınız var. Bunun yerine değişkeniniz için rastgele bir ad kullanın ...


25

tuple(l)Python> = ' dan başka bir alternatif eklemek için 3.5şunları yapabilirsiniz:

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

kısa, biraz daha hızlı ama muhtemelen okunabilirlikten muzdarip.

Bu, esasen l, tek virgülün varlığı nedeniyle oluşturulan bir demet değişmezinin içindeki listeyi açar ,.


Not: Aldığınız hata, adın maskelemesinden kaynaklanmaktadır, tupleörneğin ad grubuna bir yere atadığınız örn tuple = (1, 2, 3).

Kullanmak del tuplegitmek için iyi olmalı.


4

Bugüne kadar birçok cevap buluyorum ve doğru cevap verdim ama cevap yığınına yeni bir şeyler ekleyeceğim.

Python'da bunu yapmanın sonsuz yolları vardır, işte bazı örnekler
Normal yol

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

akıllı yol

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

Tuple'in değişmez olduğunu, değerli bir şeyi saklamak için kullanıldığını unutmayın. Örneğin parola, anahtar veya karmalar tuples veya sözlüklerde saklanır. Bıçak gerekiyorsa neden elma kesmek için kılıç kullanılır? Akıllıca kullanın, aynı zamanda programınızı verimli hale getirecektir.


2
İkinci yolun avantajı nedir?
Büyükanne Aching

Akıllıın bu modern dünya tanımında yer almak, tek bir çizgide yapılan tembel bir yaklaşım olduğundan, sanırım akıllı bir yol.
TheExorcist

1
tuple(l)(birinci yol) tuple(item for item in l)(ikinci yol) ' dan daha kısadır .
Büyükanne Aching
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.