web-dev-qa-db-ja.com

PythonでリストをTupleに変換する

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

それをグーグルすると、私は以下のような多くの答えを見つけます。

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

しかし私がそうするならば、私はこのエラーメッセージを得ます:

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

どうすればこの問題を解決できますか?

487
LynnH

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

>>> l = [4,5,6]
>>> Tuple(l)
(4, 5, 6)
723
root

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)

ただし、TupletypeTupleではなく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'>
101
unutbu

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

>>> 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)を保持していたので、... Tupleobject型のTupleになりました。

これはもうtypeではないので、Callableでもありません。

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

27
Rohit Jain

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は不変であり、貴重なものを格納するために使用されます。たとえば、パスワード、キー、ハッシュはタプルや辞書に格納されています。ナイフが必要な場合はなぜリンゴを切るために刀を使うのか。賢く使うと、プログラムの効率も上がります。

4
TheExorcist