带有负步幅的Python range()

Rob*_*abe 32 python-3.x

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

例如,使用range(10, -10)下面的方括号值而不是?

即以下行:

for y in range(10,-10)
Run Code Online (Sandbox Code Playgroud)

代替

for y in [10,9,8,7,6,5,4,3,2,1,0,-1,-2,-3,-4,-5,-6,-7,-8,-9,-10]:
Run Code Online (Sandbox Code Playgroud)

显然,人们可以用更优雅的另一种循环来做到这一点,但是这个range()例子对于我想要的东西会更好.

Use*_*ess 51

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

range(10,-11,-1)
Run Code Online (Sandbox Code Playgroud)

[10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, -1, -2, -3, -4, -5, -6, -7, -8, -9, -10] 
Run Code Online (Sandbox Code Playgroud)

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

这一切都记录在这里:

range(start, stop[, step])
Run Code Online (Sandbox Code Playgroud)

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

  • 你可能是对的,这是一个弱点.也许积极的鼓励会更好...... (7认同)
  • 我认为这个评论是完全公平的 - 提及``range()``内置但不费心去阅读文档毫无意义.他想要的就是那里. (2认同)
  • 我的原始答案虽然不那么有建设性,但是@bernie的推动是为了推动我改进它. (2认同)

Mic*_*kis 7

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

for i in range(10, -11, -1):
    print(i)
Run Code Online (Sandbox Code Playgroud)


Nay*_*uki 5

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

for y in reversed(range(-10, 11)):
Run Code Online (Sandbox Code Playgroud)

请参阅文档reversed().


小智 5

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

for i in range(10,-10)
Run Code Online (Sandbox Code Playgroud)

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

for i in range(10,-10,-1) 
Run Code Online (Sandbox Code Playgroud)