具有负步幅的Python range()

gijlo24d  于 2023-01-22  发布在  Python
关注(0)|答案(9)|浏览(150)

有没有办法使用跨距为-1的range()函数?
例如,使用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()示例将更好地满足我的需要。

f87krz0w

f87krz0w1#

您可以将跨距(包括负跨距)指定为第三个参数,因此

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]

一般来说,这种方法不需要花费任何代价,你可以简单地把它输入到解释器中,看看它会做什么。
这一切都记录在这里:

range(start, stop[, step])

但我更想鼓励你们去尝试一下,看看会发生什么。正如你们所看到的,你们的直觉是正确的。

mbjcgjjk

mbjcgjjk2#

是,通过定义步骤:

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

8qgya5xd3#

除了其他好的答案外,还有一个替代方案:

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

请参阅reversed()的文档。

shstlldc

shstlldc4#

您可能会注意到,如果没有第三个参数,范围函数只能按升序工作。如果在范围块中使用而没有第三个参数,它将不工作。

for i in range(10,-10)

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

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

gc0ot86w5#

是的,但是您需要通过将step参数设置为-1来指定要后退。
用途:
for y in range(10, -10, -1)

nnt7mjpx

nnt7mjpx6#

对于您的情况,使用range(10,-10,-1)会很有帮助。第一个参数表示第一步,第二个参数表示最后一步,第三个参数表示该步的大小。当您的范围是升序时,如果您需要range(-10,10)range(-10,-5)之间的所有数字,则无需指定步数。
但是当范围递减时,需要将步长指定为-1、range(10,-10,-1)或任何其他更大的步长。

but5z9lq

but5z9lq7#

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

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

e0uiprwp8#

总而言之,我认为以下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))

注意first的否定符号。

second = np.arange(-10, 11)

将其转换为列表,如下所示,或者将其用作numpy.ndarray类型。

to_the_list = first.tolist()
ki1q1bka

ki1q1bka9#

反向遍历列表

l1=[2,4,3]
对于范围(len(l1)-1,-1,-1)中的i:打印(l1[i])

相关问题