Python range函数

19

假设我想从0循环到100,但步骤为1/2。如果你尝试使用

for i in range(0, 100, 0.5):
    whatever

错误:

步长不能为0

问题: 在Python 2.x中有没有内置的方法可以做到这一点?


从一些答案来看,这将是一个非常出色的反向代码高尔夫问题... - ktdrv
6个回答

27

Python2.x:

=>

Python 2.x:

for idx in range(0, int(100 / 0.5)):

    print 0.5 * idx      

输出:

0.0

0.5

1.0

1.5

..

99.0

99.5


Numpy:

numpy.arange也可以解决这个问题。

numpy.arange(0, 100, 0.5)

有趣的方法,但我喜欢它。 :) - g.d.d.c
@NPE 我这里是不是漏掉了什么?这里的结果是 TypeError: range() integer end argument expected, got float. - gongzhitaao
@gongzhitaao:你说得很对,这需要明确转换为 int(请参见编辑)。由于答案是两年前写的,我已经记不清为什么要以这种方式编写它了。 - NPE

10

如果您有numpy,以下是两种实现方法:

numpy.arange(0, 100, 0.5)

numpy.linspace(0, 100, 200, endpoint=False)

4

在使用range()xrange()函数时必须使用整数步长。这就是为什么您的0.5步长会被内部转换为0并导致错误的原因。尝试使用for i in [j / 2.0 for j in xrange(100 * 2)]:


这会导致整数截断,因此您只需将每个整数重复两次。 - Peter Smith

3
您需要手动创建循环,或定义自己的自定义范围函数。内置函数需要一个整数步长值。

0
for x in map(lambda i: i * 0.5, range(0,200)):
  #Do something with x

使用 map 和 lambda 函数来处理一个简单的可迭代对象?看起来很酷,很像函数式编程,但实际上只会增加不必要的计算复杂度。 - ktdrv

0

3
在 Python 2 中,如果使用 range() 来生成列表,则会破坏生成器表达式的内存节省效果;应该使用 xrange() 代替。在 Python 3 中,xrange() 取代了 range()。 - Ned Deily

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接