636

リストをタプルに変換しようとしています。

Google のほとんどのソリューションでは、次のコードが提供されています。

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

ただし、コードを実行すると、次のエラー メッセージが表示されます。

TypeError: 'tuple' オブジェクトは呼び出し可能ではありません

この問題を解決するにはどうすればよいですか?

4

7 に答える 7

939

それはうまくいくはずです。やその他の特殊な名前を変数名として使用しないでくださいtuplelistそれはおそらくあなたの問題を引き起こしているものです。

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

>>> tuple = 'whoops'   # Don't do this
>>> tuple(l)
TypeError: 'tuple' object is not callable
于 2012-10-11T09:15:17.950 に答える
117

eumiro のコメントを拡張すると、通常tuple(l)はリストlがタプルに変換されます。

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:

In [4]: tuple = tuple(l)

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

タプル自体は呼び出し可能ではないため、 TypeError が発生します。

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

インタプリタを終了して再起動するか、(@ glglgltupleに感謝):

In [6]: del tuple

In [7]: tuple
Out[7]: <type 'tuple'>
于 2012-10-11T09:17:16.217 に答える
30

あなたは次のようなことをしたかもしれません:

>>> 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)以前に保持するために使用したため...だから、今tupleobjectof型tupleです...

それはもはや atypeではないので、それはもはや ではありませんCallable

Never変数名として任意の組み込み型を使用します...使用する他の名前があります。代わりに、変数に任意の名前を使用してください...

于 2012-10-11T09:17:25.767 に答える
4

最新で適切に回答された多くの回答を見つけましたが、回答のスタックに新しいものを追加します。

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

タプルは不変であり、価値のあるものを格納するために使用されることを忘れないでください。たとえば、パスワード、キー、またはハッシュはタプルまたは辞書に格納されます。ナイフが必要な場合、なぜリンゴを切るのに剣を使うのか. 賢明に使用してください。プログラムを効率的にすることにもなります。

于 2016-12-28T09:00:50.847 に答える