Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python范围函数_Python_Python 2.7_Range - Fatal编程技术网

Python范围函数

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循环到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.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