Python范围函数
假设我想从0循环到100,但步长为1/2。如果你尝试 范围(0、100、0.5)内的i的Python范围函数,python,python-2.7,range,Python,Python 2.7,Range,假设我想从0循环到100,但步长为1/2。如果你尝试 范围(0、100、0.5)内的i的: 无论什么 错误: 步骤不能为0 问题: Python2.x中有没有内置的方法来执行类似的操作?您必须手动创建循环,或者定义自己的自定义范围函数。内置函数需要整数步长值。Python2.x: 适用于范围(0,int(100/0.5))内的idx: 打印0.5*idx 输出: 0.0 0.5 1.0 1.5 99.0 99.5 Numpy: 我也会这样做 numpy.arange(0, 100, 0.
:
无论什么
错误:
步骤不能为0
问题:
Python2.x中有没有内置的方法来执行类似的操作?您必须手动创建循环,或者定义自己的自定义范围函数。内置函数需要整数步长值。Python2.x:
适用于范围(0,int(100/0.5))内的idx:
打印0.5*idx
输出:
0.0
0.5
1.0
1.5
99.0
99.5
Numpy: 我也会这样做
numpy.arange(0, 100, 0.5)
对于
range
()和xrange()
,必须使用整数步长。这就是为什么您的0.5步骤在内部被转换为0,并且您会得到该错误。在[j/2.0 for j in xrange(100*2)]中为i尝试:
如果您有numpy
,以下是两种方法:
numpy.arange(0, 100, 0.5)
numpy.linspace(0, 100, 200, endpoint=False)
对于大范围,最好使用生成器表达式,而不是显式构建列表:
for k in ( i*0.5 for i in range(200) ):
print k
这不会消耗太多额外内存,速度快且易于阅读。
参见有趣的方法,但我喜欢它。:)@NPE我是不是遗漏了什么?以下是结果
TypeError:range()应为整数结束参数,得到浮点。
@gongzhitaao:你说得很对,这需要显式转换为int
(请参见编辑)。因为这个答案是两年前写的,我不记得为什么我会这样写。整数截断就是这样发生的,所以每个整数只需重复两次。map
和一个简单iterable的lambda函数?看起来很酷,函数式编程-y,但实际上,它只会增加不必要的计算复杂性。看看一些答案,这将是一个极好的反向代码高尔夫问题……在Python 2中,由于range()生成一个列表,您将无法节省生成器表达式的内存;改用xrange()。在Python3中,xrange()替换range()。
for k in ( i*0.5 for i in range(200) ):
print k