假设我想从0循环到100,但步骤为1/2。如果你尝试使用
for i in range(0, 100, 0.5):
whatever
错误:
步长不能为0
问题: 在Python 2.x中有没有内置的方法可以做到这一点?
假设我想从0循环到100,但步骤为1/2。如果你尝试使用
for i in range(0, 100, 0.5):
whatever
错误:
步长不能为0
问题: 在Python 2.x中有没有内置的方法可以做到这一点?
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)
TypeError: range() integer end argument expected, got float.
- gongzhitaaoint
(请参见编辑)。由于答案是两年前写的,我已经记不清为什么要以这种方式编写它了。 - NPE如果您有numpy
,以下是两种实现方法:
numpy.arange(0, 100, 0.5)
numpy.linspace(0, 100, 200, endpoint=False)
在使用range()
和xrange()
函数时必须使用整数步长。这就是为什么您的0.5步长会被内部转换为0并导致错误的原因。尝试使用for i in [j / 2.0 for j in xrange(100 * 2)]:
for x in map(lambda i: i * 0.5, range(0,200)):
#Do something with x
map
和 lambda 函数来处理一个简单的可迭代对象?看起来很酷,很像函数式编程,但实际上只会增加不必要的计算复杂度。 - ktdrv对于大范围的操作,最好使用生成器表达式而不是显式地构建列表:
for k in ( i*0.5 for i in range(200) ):
print k
这不会消耗太多的额外内存,而且快速易读。 请参见 http://docs.python.org/tutorial/classes.html#generator-expressions