2017-04-15 5 views
-2

Es ist ein Fehler, wenn ich ausführen Diese code-
für i in len (str_list): Typeerror: 'int' Objekt ist iterable nichtTypeerror: 'int' Objekt Iterable nicht

Wie würde Ich befestige es? (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 
+1

"len (str_list)" eine Integer geben, können Sie nur durch die "Iterale" durchlaufen. Vielleicht willst du 'range (len (str_list))'. –

+0

Warum nicht einfach 'für elem in str_list:' und 'str_sum + = len (elem)' benutzen? Python 'for' Schleifen sind * für jedes * Konstrukt, so dass Sie direkt über die beleuchteten Elemente schleifen können. –

Antwort

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) 
5

Sie versuchen, in Ganzzahl Schleife über; len() gibt eins zurück.

Wenn Sie eine Schleife über eine Folge von ganzen Zahlen produzieren müssen, verwenden Sie eine range() object:

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

Durch im len(str_list) Ergebnis range() vorbei, erhalten Sie eine Sequenz von Null auf die Länge von str_list, minus eins (da der Endwert nicht enthalten ist).

Beachten Sie, dass Sie jetzt Ihr i Wert wird der falsche Wert zu verwenden, um einen Mittelwert zu berechnen, weil es eine kleinen als die tatsächliche Listenlänge ist! Sie wollen teilen, indem er len(str_list):

return str_sum/len(str_list) 

Allerdings gibt besteht keine Notwendigkeit dies in Python zu tun. Sie durchlaufen die Elemente der Liste selbst. Das beseitigt die Notwendigkeit, einen Index zu erstellen, zuerst:

for elem in str_list 
    str_sum += len(elem) 

return str_sum/len(str_list) 

All dies kann mit den sum() function in einer Zeile ausgedrückt werden, übrigens:

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

I ersetzt den Namen str mit s; besser nicht den Namen des eingebauten Typs maskieren, was später zu verwirrenden Fehlern führen könnte.

0

Für For-Schleifen müssen mehrere Elemente wie eine Liste von [1, 2, 3] durchlaufen werden (enthält 3 Elemente/Elemente).

Die len-Funktion gibt ein einzelnes Element zurück, das eine Ganzzahl der Länge des Objekts ist, das Sie als Parameter angegeben haben.

Um etwas so oft wie die Länge eines Objekts iterieren zu lassen, können Sie das len-Funktionsergebnis einer Bereichsfunktion übergeben. Dadurch wird ein iterabler Wert erstellt, der es Ihnen ermöglicht, so oft wie die Länge des gewünschten Objekts zu iterieren.

So etwas wie

for i in range(len(str_list)): 

, wenn Sie durch die Liste gehen und nicht die Länge der Liste. Sie können dann einfach mit

for i in str_list: 
Verwandte Themen