TypeError:/:'float'和'list'的不支持的操作数类型

时间:2015-01-24 04:52:09

标签: python list

我试图计算两个列表的元素划分:

outCount = [0,2,1,3]
PR_old = [0.25,0.25,0.25,0.25]
inSum = 0
for j in range(len(outCount)):
    if outCount[j] == 0:
        continue
    inSum += PR_old[j]/outCount[j]

我收到以下错误:

TypeError: unsupported operand type(s) for /: 'float' and 'list'

2 个答案:

答案 0 :(得分:3)

除了for循环的错误缩进之外,您的代码还可以。它应该是这样的:

outCount = [0,2,1,3]
PR_old = [0.25,0.25,0.25,0.25]
inSum = 0
for j in range(len(outCount)):
    if outCount[j] == 0:
        continue
    inSum += PR_old[j]/outCount[j]

print inSum

但是,有更多的Pythonic方法可以做到这一点。你真的不需要那个索引变量j。您可以使用zip()

同时迭代这两个列表
inSum = 0
for u, v in zip(PR_old, outCount):
    if v:
        inSum += u / v

或者在生成器表达式中执行基本相同的操作并使用内置的sum()函数执行添加:

inSum = sum(u / v for u, v in zip(PR_old, outCount) if v)

FWIW,inSum的最终值为0.458333333333

(在Python 2.6.6上测试的代码)

答案 1 :(得分:0)

除了明显的缩进错误,我无法重现您的问题。具体做法是:

2>>> outCount = [0,2,1,3]
2>>> PR_old = [0.25,0.25,0.25,0.25]
2>>> inSum = 0
2>>> for j in range(len(outCount)):
2...         if outCount[j] == 0:
2...             continue
2...         inSum += PR_old[j]/outCount[j]
2... 
2>>> print(inSum)
0.458333333333

(提示前面的2只是为了表明我使用的是Python 2,但没关系,它在Python 3中的工作原理相同。)

请复制并粘贴此代码(当然将编辑提示编辑)到Python交互式解释器中,并告诉我们您在此代码中向我们显示的错误信息,您将收到报告的错误。