Python中range()函数使用负步长

58

有没有一种方法可以在 range() 函数中使用步幅 -1?

例如,是否可以使用 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()的例子更适合我想要的。

9个回答

86

你可以将步长(包括负步长)作为第三个参数指定,因此

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])

但是我更希望鼓励你去尝试玩耍,看看会发生什么。就像你看到的那样,你的直觉是正确的。


7
也许你说得对,这是一个弱点。也许积极的鼓励会更好…… - Useless
我认为这个评论很公正。我确实在解释器中尝试过,但我没有加入步幅。 - RobotMugabe
2
我认为这个评论完全公正 - 提到range()内置函数却不去阅读文档是毫无意义的。他想要的东西就在那里。 - Gareth Latty
2
我的原始回答不够建设性,所以感谢@bernie的推动让我改进了它。 - Useless
非常感谢,我想要的就是这个。 非常感谢,我缺少的只是步骤-1。 - Aniruddha Kalburgi

11
是的,通过定义一个步骤可以实现:
for i in range(10, -11, -1):
    print(i)

8
除了其他好的答案之外,还有一个替代方案:
for y in reversed(range(-10, 11)):

请参阅reversed()的文档。


6

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

for i in range(10,-10)

上述循环无法正常工作。 要使上述循环正常工作,您必须将第三个参数使用负数。
for i in range(10,-10,-1) 

2

是的,不过您需要通过将步长参数设置为-1来指定您想要向后跨步。

使用:

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


1
很不幸,这并没有打印出-10...它从10到-9。 - Jeff B

2
对于您的情况,使用range(10,-10,-1)会很有帮助。第一个参数是起始步骤,第二个参数是结束步骤,第三个参数是步骤的大小。 当您的范围是升序时,如果需要在两者之间的所有数字,则不需要指定步骤,例如range(-10,10)range(-10,-5)
但是,当您的范围是降序时,您需要将步长指定为-1,如range(10,-10,-1)或任何其他较大的步长。

1

如果您喜欢在范围内创建列表:

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

智能的替代选择! - Aniruddha Kalburgi

0

#逆序遍历列表

l1=[2,4,3]

for i in range (len(l1)-1,-1,-1): print (l1[i])


输出 => 3 4 2 Range 函数语法range(start, stop, step) 参数值 参数说明start 可选。一个整数,指定从哪个位置开始。默认为 0。 stop 必需。一个整数,指定在哪个位置停止(不包括该位置)。 step 可选。一个整数,指定增量。默认为 1。 - Sumant W W
你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心找到有关如何编写良好答案的更多信息。 - Community

0
总结一下,我认为以下这三种方法最高效且相关,可以用来回答问题:
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()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接