整数除法而不是Python中的常规除法

时间:2014-02-17 14:24:44

标签: python-2.7 division

我有这个简单的代码:

[n/2 for n in range(100, 200)]

但奇怪的是,它返回[50,50,51,51,52,52等],所以它使用整数除法而不是正常除法(我需要它输出[50,50.5,51,51.5,等])为什么会这样?

2 个答案:

答案 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