如何在python中用数字划分列表中的每个元素

时间:2012-02-15 14:00:41

标签: python list

我有一个列表'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

它没有给我预期的结果

有谁知道这里有什么问题?

5 个答案:

答案 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>> python3float()不是必需的。