要素が一つのタプルとリストでの違い
普段からタプルとリストの違いといえば、初期値で固定か否かぐらいにしか意識していなかった。そのため意外な箇所でエラーになったので備忘録として残す。
(コードはpython3です。)
エラー事例
問題があったのは以下のコード
if num in (3): print("{}は3だよ".format(num))
1行目での条件分岐で指定の値が複数の値に含まれるか判別するコードだが、実装中に気がつけば要素が1つになっていることはよくあると思う。このコードは実行するとエラーになる。
>>> num = 3 >>> if num in (3): ... print("{}は3だよ".format(num)) ... Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: argument of type 'int' is not iterable
しかし、タプル"(3)"をリスト"[3]"にするとエラーにはならない
>>> num = 3 >>> if num in [3]: ... print("{}は3だよ".format(num)) ... 3は3だよ
なぜか?
初期化したタプルとリストの型を表示すると原因が分かった
>>> t = (1) >>> a = [1] >>> t.__class__.__name__ 'int' >>> a.__class__.__name__ 'list' >>> t2 = (1,2) >>> t2.__class__.__name__ 'tuple'
要素が一つのタプルは自動でint型として扱われる。要素が一つのリストはlist型のままだ。
普段からタプルとリストをもっと意識して使おう