【发布时间】:2010-10-03 09:53:06
【问题描述】:
有没有办法在 0 和 1 之间步进 0.1?
我以为我可以这样做,但它失败了:
for i in range(0, 1, 0.1):
print i
相反,它说 step 参数不能为零,这是我没想到的。
【问题讨论】:
-
int(0.1) == 0,因此步长实际上为零。这可能是出乎意料的,但它是零。您可能想重申您的问题以反映您没想到这一事实。说“不是”是错误的和误导性的。
-
顺便说一句,可以使用
itertools.takewhile和itertools.count卷起一个短的单行。不过,在性能方面,它并不比drange好。 -
令人尴尬的是,python 的范围不允许这样做,因为即使没有累积舍入错误,实现生成器也很容易做到这一点。哎呀,即使是 GNU coreutils 中的
seq工具,也可以在没有舍入错误的情况下执行seq 0 0.1 1! -
@josch:
seq在内部使用 Clong double类型,并且 是 会出现舍入错误。例如在我的机器上,seq 0 0.1 1将1作为其最后一个输出(如预期的那样),但seq 1 0.1 2将1.9作为最后一个输出(而不是预期的2)。 -
为方便起见,@Kos 的建议可以实现为
itertools.takewhile(lambda x: (x+0.05)<1, itertools.count(0,0.1))或itertools.islice(itertools.count(0,0.1), 10)(在你有import itertools之后),虽然我没有测试过哪个更有效
标签: python floating-point range