TypeError: 'int' object is not iterable.
次のコードを実行すると、エラーが発生します。 for i in len(str_list): TypeError: 'int' オブジェクトはイテラブルではありません。
どのように修正すればいいのでしょうか?(Python 3)
def str_avg(str):
str_list=str.split()
str_sum=0
for i in len(str_list):
str_sum += len(str_list[i])
return str_sum/i
0
3
整数をループさせようとしている。
len()
は1を返す。もし、整数の列に対するループを生成しなければならない場合は、
range()
オブジェクト を使ってください。range()
に
len(str_list)の結果を渡すと、0から
str_list` の長さを1だけ減らしたものが得られます(終了値が含まれないからです)。ここで、
i
の値は実際のリストの長さより 1 だけ小さい ので、平均を計算するのに使うには 不正確な 値であることに注意してください!なぜなら、実際のリストの長さよりも **1 だけ小さいからです!len(str_list)
で割りたいのです。しかし、Pythonではこれを行う必要は**ありません。リストそのものをループさせるのです。これによって、最初にインデックスを作成する必要性がなくなります。
ちなみに、これらはすべて
sum()
関数で1行で表現することができます。組み込みの型名を隠してしまうと、後で混乱することになるので、
str
という名前はs
に置き換えています。Forループでは、[1, 2, 3]のリスト(3つの項目/要素を含む)のように、複数の項目を反復処理する必要があります。
len関数は、パラメータとして与えたオブジェクトの長さの整数を1つの項目として返します。
オブジェクトの長さの数だけ反復処理を行うには、len関数の結果を範囲関数に渡します。これは反復可能なオブジェクトを作成し、オブジェクトの長さの何倍でも反復することができます。
つまり、次のようなことです。
は、リストの長さではなく、リストを通過させたい場合を除きます。その場合は