带有负步幅的Python range()

时间:2012-03-28 14:52:12

标签: python-3.x

有没有办法使用stride -1的range()函数?

E.g。使用range(10, -10)代替下面的方括号值?

即以下行:

for y in range(10,-10)

而不是

for y in [10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10]:

显然,人们可以更优雅地使用另一种循环,但range()示例可以更好地满足我的需求。

7 个答案:

答案 0 :(得分:46)

您可以指定步幅(包括负步幅)作为第三个参数,所以

range(10,-11,-1)

给出

[10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, -1, -2, -3, -4, -5, -6, -7, -8, -9, -10] 

一般情况下,尝试不需要任何费用。您只需将其输入解释器并查看其功能即可。

全部documented here为:

range(start, stop[, step])

但大多数情况下,我想鼓励你一起玩,看看会发生什么。正如你所看到的,你的直觉很明显。

答案 1 :(得分:7)

是的,通过定义一个步骤:

for i in range(10, -11, -1):
    print(i)

答案 2 :(得分:5)

除了其他好的答案外,还有另一种选择:

for y in reversed(range(-10, 11)):

请参阅reversed()的文档。

答案 3 :(得分:5)

您可能会注意到范围功能仅在没有第三个参数的情况下按升序运行。如果在范围块中没有第三个参数时使用它,它将无效。

for i in range(10,-10)

以上循环不起作用。 要使上述循环起作用,必须使用第三个参数作为负数。

for i in range(10,-10,-1) 

答案 4 :(得分:2)

是的,但是您需要通过将step参数设置为-1来指定要向后退步。

使用:

for y in range(10, -10, -1)

答案 5 :(得分:0)

如果您希望在范围内创建列表:

numbers = list(range(-10, 10))

答案 6 :(得分:0)

总而言之,这3种方法最有效,并且与我认为的答案方法相关:

first = list(x for x in range(10, -11, -1))

second = list(range(-10, 11))

third = [x for x in reversed(range(-10, 11))]

或者,NumPy将创建如下数组,这比在python中创建项目并将其写入列表要快得多。然后,您可以将其转换为列表:

import numpy as np

first = -(np.arange(10, -11, -1))

请注意首先要使用否定符号。

second = np.arange(-10, 11)

按照以下说明将其转换为列表,或将其用作numpy.ndarray类型。

to_the_list = first.tolist()