有没有办法使用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()
示例可以更好地满足我的需求。
答案 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)
答案 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()