Python范围功能

时间:2011-09-23 16:14:49

标签: python range

假设我想从0循环到100但是步长为1/2。如果你试试

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

它调用一个错误,说步骤不能为0.是否有内置方法可以做这样的事情?

我正在使用Python 2.x。

6 个答案:

答案 0 :(得分:21)

In [1]: for i in range(0, int(100 / 0.5)):
   ...:     print 0.5 * i
   ...:     
   ...:     
0.0
0.5
1.0
1.5
...
98.0
98.5
99.0
99.5

如果您可以使用numpy,那么numpy.arange(0, 100, 0.5)也可以使用。

答案 1 :(得分:9)

如果您有numpy,则有以下两种方法:

numpy.arange(0, 100, 0.5)

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

答案 2 :(得分:4)

您必须对range()和xrange()使用整数步骤。这就是为什么你的0.5步被内部转换为0并且你得到那个错误。试试for i in [j / 2.0 for j in xrange(100 * 2)]:

答案 3 :(得分:3)

您必须手动创建循环,或定义自己的自定义范围功能。内置需要整数步长值。

答案 4 :(得分:0)

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

答案 5 :(得分:0)

对于大范围,最好使用生成器表达式而不是显式构建列表:

 for k in ( i*0.5 for i in range(200) ):
     print k

这消耗了额外的内存,快速且易于阅读。 见http://docs.python.org/tutorial/classes.html#generator-expressions