Python 3.x 我有一个查询,在执行下面的代码时,我';m获取类型错误“;Int对象不可iterable“;

Python 3.x 我有一个查询,在执行下面的代码时,我';m获取类型错误“;Int对象不可iterable“;,python-3.x,Python 3.x,然而,我试图理解使用pythontutor,我在Zip参数中得到了错误 probs = [0.315, 0.226, 0.289, 0.087, 0.083] paper = [533, 486, 386, 234, 263] demand_paper2= 0 for probs, paper in zip (probs, paper): demand_paper2 = demand_paper2 + probs * paper print( 'Expected demand:

然而,我试图理解使用pythontutor,我在Zip参数中得到了错误

probs = [0.315, 0.226, 0.289, 0.087, 0.083]
paper = [533, 486, 386, 234, 263]
demand_paper2= 0
for probs, paper in zip (probs, paper):
    demand_paper2 = demand_paper2 + probs * paper    
print( 'Expected demand: ' + str(demand_paper2))    
var1 = sum([prob * (d- demand_paper2)**2 
         for prob, d in zip(probs, demand_paper2)])
std1 = var1 ** 0.5                                  
print('The standard deviation of demand: {0:0.3f}'.format(std1))

这次通话都有两个问题:
zip(问题,需求文件2)

第一个问题是您在第一个循环中意外反弹了
probs
变量。因此,它现在只包含一个值(列表中的最后一个值),而不是在代码开始时绑定到的原始列表

第二个问题是
zip
的另一个参数。
demand\u paper2
变量是一个数字,因此也不能迭代。我认为您希望在原始的
文件
列表上进行迭代,但该列表不可用,但至少这将问题简化为具有相同问题的两个变量

解决整个问题的方法就是选择新的变量名。如果列表的名称与第一个循环中的变量的名称不同,那么就可以了

probs = [0.315, 0.226, 0.289, 0.087, 0.083]
papers = [533, 486, 386, 234, 263]                  # renamed this variable
demand_paper2= 0
for prob, paper in zip (probs, papers):             # and use prob and papers here
    demand_paper2 = demand_paper2 + prob * paper    
print( 'Expected demand: ' + str(demand_paper2))    
var1 = sum([prob * (d- demand_paper2)**2 
            for prob, d in zip(probs, papers)])     # refer to the papers list here
std1 = var1 ** 0.5                                  
print('The standard deviation of demand: {0:0.3f}'.format(std1))

demand\u paper2
变量名也很糟糕,但我保持原样,因为它现在实际上并没有引起任何问题。但它可能会更好,比如
预期的\u-paper
或其他什么

zip中'for prob,d(probs,demand_paper2)]的缩进错误
d
in
var1=sum([prob*(d-demand_paper2)**2
@PatrickArtner:我得到问题标题中描述的错误。您的问题必须来自于在
sum
调用中作为两行单独输入多行列表理解。