【发布时间】:2022-07-17 12:39:10
【问题描述】:
如何以 0.1 的步长在 0 和 1 之间进行迭代?
这表示 step 参数不能为零:
for i in range(0, 1, 0.1):
print(i)
-
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