我有一个列表'q',我希望将q中的每个数字除以每个列表中的总和(= 10) 我试过这个:
q = [[0,0,0,10],[1,2,6,1]]
B=[]
for x in q:
y = [z/sum(x[:len(x)]) for z in x]
B.append(y)
print B
它没有给我预期的结果
有谁知道这里有什么问题?
答案 0 :(得分:2)
正如其他人所说,你的程序将使用整数除法,这似乎不是你想要的。但是,我建议正确的解决方案是将from ___future__ import division
添加到脚本的顶部(实际上,每个脚本),而不是将其中一个值显式转换为浮点数。你在Python 3之前为Python版本编写。这会将除法切换为返回浮点值,从而消除了许多微妙的数学错误。对于那些需要整数除法的情况,可以使用双斜杠//
。
答案 1 :(得分:1)
B = []
for x in q:
theSum = sum(x)
y = [float(xi) / theSum for xi in x]
B.append(y)
print B
答案 2 :(得分:1)
您正在执行整数除法,因为两个操作数都是整数。
y = [float(z)/sum(x) for z in x]
答案 3 :(得分:1)
您正在使用整数除法,它会将结果四舍五入为零。将其中一个操作数转换为float
以获得浮点除法。要在适当的位置转换数组,您可以执行
for row in q:
s = float(sum(row))
row[:] = [x / s for x in row]
答案 4 :(得分:1)
$ python
>>> q = [[0,0,0,10],[1,2,6,1]]
>>> B = [[float(j)/sum(i) for j in i] for i in q]
>>> B
[[0.0, 0.0, 0.0, 1.0], [0.1, 0.2, 0.6, 0.1]]
注意:<{strong>> python3
,float()
不是必需的。