![](/img/trans.png)
[英]In a list of lists divide each second element by each third element, python
[英]how to divide each element in a list of lists by a number in python
我有一个列表'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
它没有给我预期的结果
有人知道这是怎么回事吗?
正如其他人指出的那样,您的程序将使用整数除法,这似乎并不是您想要的。 但是,我建议不要将正确的解决方案是将from ___future__ import division
添加到脚本顶部(实际上,您为Python 3之前的Python版本编写的每个脚本)也应添加from ___future__ import division
而不是将值之一明确转换为浮点数。 )。 这会将除法切换为返回浮点值,从而消除了许多细微的数学错误。 对于确实需要整数除法的情况,可以使用双斜杠//
。
B = []
for x in q:
theSum = sum(x)
y = [float(xi) / theSum for xi in x]
B.append(y)
print B
您正在执行整数除法,因为两个操作数都是整数。
y = [float(z)/sum(x) for z in x]
您正在使用整数除法,它将结果四舍五入为零。 将其中一个操作数转换为float
以获取浮点除法。 要就地转换数组,您可以
for row in q:
s = float(sum(row))
row[:] = [x / s for x in row]
$ 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]]
注意:在python3
,不需要float()
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.