TypeError: 'int' object is not iterable

 プログラミングと暇つぶし Python リストを見ていたら、「pythonにてstrの数字とintの数字を取り込んで全部int化されたリストを作りたい。けど、エラーがでてうまくいかない」って書いてあるところでなんか引っかかった。ブログで言及されているTypeError: 'int' object is not iterableは今まで見たことがないエラー。リスト関数list()ってよくよく考えるとイテレーターなものしか飲み込まないんですね。知らんかった。

で、こういう時ってmapなのかなぁっと思って書いた。*1

>>> [1, 2]+list(map(lambda x:int(x),list("34")))
[1, 2, 3, 4]

うーん、可読性悪いな。

  • 補足

 どういったものがイテレータで、どういったものが違うのか具体例を三つほど挙げます。数字やクラスはどうもダメみたいです。文字はイテレータですね。クラスについては、別途、イテレータとしての定義が可能です。

>>> list("a")
['a']
>>> list(1)
Traceback (most recent call last):
  File "<pyshell#22>", line 1, in <module>
    list(1)
TypeError: 'int' object is not iterable
>>> class _:
	pass

>>> list(_)
Traceback (most recent call last):
  File "<pyshell#26>", line 1, in <module>
    list(_)
TypeError: 'type' object is not iterable
  • おまけ

やっぱ内包表記がシンプルですよね。

>>> [1,2]+[int(x) for x in "34"]
[1, 2, 3, 4]

*1:python3のmapはlistを返すことはありません。変換しましょう