こんにちはPythonをいじっていて、以下のようなエラーに出てしまうことはありませんか?
”TypeError: argument of type ‘int’ is not iterable”
iterableといわれてもさっぱりですが、Python Japanのサイトに説明がありますので見てみましょう。
iterable
(反復可能オブジェクト) 要素を一つずつ返せるオブジェクトです。反復可能オブジェクトの例には、(list, str, tuple といった) 全てのシーケンス型や、 dict や file といった幾つかの非シーケンス型、あるいは __iter__() か __getitem__() メソッドを実装したクラスのインスタンスが含まれます。
反復可能オブジェクトは for ループ内やその他多くのシーケンス (訳注: ここでのシーケンスとは、シーケンス型ではなくただの列という意味)が必要となる状況 (zip(), map(), …) で利用できます。
反復可能オブジェクトを組み込み関数 iter() の引数として渡すと、オブジェクトに対するイテレータを返します。このイテレータは一連の値を引き渡す際に便利です。反復可能オブジェクトを使う際には、通常 iter() を呼んだり、イテレータオブジェクトを自分で扱う必要はありません。 for 文ではこの操作を自動的に行い、無名の変数を作成してループの間イテレータを記憶します。
ここまで読んでお分かりだと思いますが、要するにintは反復可能オブジェクトではないということです。
具体的な例をみてみましょう。
よくはまる例としては、ある文字(列)が文字列中に含まれるか判定するときに使う、演算子”in”があります。
>>> "1" in "1234" True >>>
これはOKですが、ダブルクォーテーションを外すとNGです。
>>> 1 in 1234 Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: argument of type 'int' is not iterable
このように直接、数値が記述されている場合は一目瞭然ですが、実際のプログラムでは変数で書かれている場合がほとんどです。
変数で記述されている場合は一見してわからない場合も多いのではないでしょうか。
Pythonでディープラーニングを学ぶならこの本がおすすめ(アマゾンで購入)
Pythonでディープラーニングを学ぶならこの本がおすすめ(楽天で購入)
ゼロから作るDeep Learning Pythonで学ぶディープラーニングの理論と実装 [ 斎藤 康毅 ]
|