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を返すことはありません。変換しましょう