类型错误:“诠释”对象不是可迭代
问题描述:
有当我执行这个代码 -
为我的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
答
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)
答
您试图在整数循环结束; 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)
我更换了名称str
与s
;最好不要掩盖内置的类型名称,以后可能会导致混淆错误。
答
For循环需要多个项目来遍历[1,2,3](包含3个项目/元素)。
len函数返回一个单个项目,它是您将其作为参数提供给它的对象的长度的整数。
要让某些东西的迭代次数与对象的长度一样多,您可以将len函数的结果提供给范围函数。这创建了一个迭代器,允许您随时重复所需对象的长度。
所以这样做
for i in range(len(str_list)):
,除非你想通过列表,而不是列表的长度。你可以迭代
for i in str_list:
'len(str_list)'会给出一个整数,你只能遍历'iterals'。可能你想'范围(len(str_list))'。 –
为什么不在str_list中使用'for elem:'和'str_sum + = len(elem)'?对于每个*结构,Python for for循环都是*,所以你可以直接循环点亮元素。 –