2017-04-15 136 views
-2

有当我执行这个代码 -
为我的len(为str_list)错误: 类型错误:“诠释”对象不是可迭代类型错误:“诠释”对象不是可迭代

将如何我修复它? (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)'会给出一个整数,你只能遍历'iterals'。可能你想'范围(len(str_list))'。 –

+0

为什么不在str_list中使用'for elem:'和'str_sum + = len(elem)'?对于每个*结构,Python for for循环都是*,所以你可以直接循环点亮元素。 –

回答

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

您试图在整数循环结束; len()返回一个。

如果必须产生在整数的顺序循环,使用range() object

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

通过在len(str_list)结果传递给range(),你从零序列的str_list长,减一(因为不包括最终值)。

注意,现在您i值将是不正确价值用来计算平均,因为它是一个比实际的列表长度较小!你想通过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() function表示,顺便说一句:

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

我更换了名称strs;最好不要掩盖内置的类型名称,以后可能会导致混淆错误。

0

For循环需要多个项目来遍历[1,2,3](包含3个项目/元素)。

len函数返回一个单个项目,它是您将其作为参数提供给它的对象的长度的整数。

要让某些东西的迭代次数与对象的长度一样多,您可以将len函数的结果提供给范围函数。这创建了一个迭代器,允许您随时重复所需对象的长度。

所以这样做

for i in range(len(str_list)): 

,除非你想通过列表,而不是列表的长度。你可以迭代

for i in str_list: 
相关问题