リストをタプルに変換しようとしています。
それをグーグルすると、私は以下のような多くの答えを見つけます。
l = [4,5,6]
Tuple(l)
しかし私がそうするならば、私はこのエラーメッセージを得ます:
TypeError: 'Tuple'オブジェクトは呼び出し可能ではありません
どうすればこの問題を解決できますか?
それはうまくいくはずです。変数名としてTuple
、list
、その他の特殊な名前を使用しないでください。おそらくそれはあなたの問題を引き起こしているものです。
>>> l = [4,5,6]
>>> Tuple(l)
(4, 5, 6)
Eumiroのコメントを拡張して、通常Tuple(l)
はリストl
をTupleに変換します。
In [1]: l = [4,5,6]
In [2]: Tuple
Out[2]: <type 'Tuple'>
In [3]: Tuple(l)
Out[3]: (4, 5, 6)
ただし、Tuple
をtype
Tuple
ではなくTupleになるように再定義したとします。
In [4]: Tuple = Tuple(l)
In [5]: Tuple
Out[5]: (4, 5, 6)
tuple自体は呼び出し可能ではないため、TypeErrorが返されます。
In [6]: Tuple(l)
TypeError: 'Tuple' object is not callable
インタプリタを終了して再起動することでTuple
の元の定義を回復できます。または(@glglglのおかげで)
In [6]: del Tuple
In [7]: Tuple
Out[7]: <type 'Tuple'>
あなたはこのようなことをしたかもしれません:
>>> 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)
問題は次のとおりです。以前はTuple
変数を使用してTuple (45, 34)
を保持していたので、... Tuple
はobject
型のTuple
になりました。
これはもうtype
ではないので、Callable
でもありません。
Never
は、変数名として任意の組み込み型を使用します。他に使用する名前はありません。代わりにあなたの変数に任意の名前を使用してください...
Python> = 3.5
の時点で、Tuple(l)
に別の選択肢を追加するには、次のようにします。
t = *l, # or t = (*l,)
短く、 ビット は速いですが、おそらく読みやすさには問題があります。
これは本質的に、単一のカンマ,
が存在するために作成されたTupleリテラル内のリストl
をアンパックします。
P.s:あなたが受けているエラーは、名前Tuple
、すなわちあなたがどこかでTupleという名前を割り当てた、例えばTuple = (1, 2, 3)
のマスキングによるものです。
del Tuple
を使うのはいいでしょう。
私は最新の多くの答えを見つけ、正しく答えましたが、答えの積み重ねに何か新しいことを加えるでしょう。
Pythonにはこれを行う無限の方法があります、ここにいくつかの例があります
通常の方法
>>> l= [1,2,"stackoverflow","python"]
>>> l
[1, 2, 'stackoverflow', 'python']
>>> tup = Tuple(l)
>>> type(tup)
<type 'Tuple'>
>>> tup
(1, 2, 'stackoverflow', 'python')
スマートな方法
>>>Tuple(item for item in l)
(1, 2, 'stackoverflow', 'python')
Tupleは不変であり、貴重なものを格納するために使用されます。たとえば、パスワード、キー、ハッシュはタプルや辞書に格納されています。ナイフが必要な場合はなぜリンゴを切るために刀を使うのか。賢く使うと、プログラムの効率も上がります。