我有这个简单的代码:
[n/2 for n in range(100, 200)]
但奇怪的是,它返回[50,50,51,51,52,52等],所以它使用整数除法而不是正常除法(我需要它输出[50,50.5,51,51.5,等])为什么会这样?
答案 0 :(得分:3)
在Python 2中,除以2个整数将始终生成一个整数。 (在Python 3中,你得到“真正的”分裂)
您可以将代码重写为:
[n/2.0 for n in range(100, 200)]
或在您有2个变量的情况下:
[float(n)/othervar for n in range(100, 200)]
获得预期的行为,
或添加
from __future__ import division
在文件的开头,现在就获得Python 3的行为。
要回答问题的“为什么”部分,这是C的除法语义的延续(尽管Python选择总是将结果置于舍入而不是向0舍入,所以你甚至得不到真正的C整数分裂语义。)
答案 1 :(得分:1)
尝试[n/2.0 for n in range(100, 200)]
使其成为浮动操作。通过将2
作为整数传递,并将范围内的所有数字作为整数Python将结果视为整数。您需要Floating Point Arithmetic
。有关详细信息,请参阅here。