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

整数をループさせようとしている。len()は1を返す。

もし、整数の列に対するループを生成しなければならない場合は、 range() オブジェクト を使ってください。

for i in range(len(str_list)):
    # ...

range()len(str_list)の結果を渡すと、0からstr_list` の長さを1だけ減らしたものが得られます(終了値が含まれないからです)。

ここで、i の値は実際のリストの長さより 1 だけ小さい ので、平均を計算するのに使うには 不正確な 値であることに注意してください!なぜなら、実際のリストの長さよりも **1 だけ小さいからです! len(str_list) で割りたいのです。

return str_sum / len(str_list)

しかし、Pythonではこれを行う必要は**ありません。リストそのものをループさせるのです。これによって、最初にインデックスを作成する必要性がなくなります。

for elem in str_list
    str_sum += len(elem)

return str_sum / len(str_list)

ちなみに、これらはすべてsum()関数で1行で表現することができます。

def str_avg(s):
    str_list = s.split()
    return sum(len(w) for w in str_list) / len(str_list)

組み込みの型名を隠してしまうと、後で混乱することになるので、 str という名前は s に置き換えています。

解説 (0)
def str_avg(str):
    str_list = str.split()
    str_sum = len(''.join(str_list))  # get the total number of characters in str
    str_count = len(str_list)  # get the total words

    return (str_sum / str_count)
解説 (0)

Forループでは、[1, 2, 3]のリスト(3つの項目/要素を含む)のように、複数の項目を反復処理する必要があります。

len関数は、パラメータとして与えたオブジェクトの長さの整数を1つの項目として返します。

オブジェクトの長さの数だけ反復処理を行うには、len関数の結果を範囲関数に渡します。これは反復可能なオブジェクトを作成し、オブジェクトの長さの何倍でも反復することができます。

つまり、次のようなことです。

for i in range(len(str_list)):

は、リストの長さではなく、リストを通過させたい場合を除きます。その場合は

for i in str_list:
解説 (0)