用range()以相反的顺序打印一个列表?

如何在Python中使用range()生成以下列表?

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

使用reversed()函数:

 reversed(range(10)) 

这更有意义。

更新:

如果你想它是一个列表(如BTT指出):

 list(reversed(range(10))) 

更新:

如果您只想使用range来获得相同的结果,则可以使用其所有参数。 range(start, stop, step)

例如,要生成一个列表[5,4,3,2,1,0] ,可以使用以下命令:

 range(5, -1, -1) 

它可能不那么直观,但如评论所述,这是更有效的,正确使用范围倒序列表。

使用“范围”内置function。 签名是range(start, stop, step) 。 这会产生一个序列,从start产生数字,如果达到stop ,则结束,不包括stop

 >>> range(9,-1,-1) [9, 8, 7, 6, 5, 4, 3, 2, 1, 0] >>> range(-2, 6, 2) [-2, 0, 2, 4] 

在Python 3中,这会生成一个非列表range对象,它的function类似于只读列表(但使用less量内存,特别是对于大范围)。

你可以使用range(10)[::-1] ,它和range(9, -1, -1) ,可以说是更可读的(如果你熟悉Python的通用sequence[::-1]成语)。

 for i in range(8, 0, -1) 

将解决这个问题。 它将输出8到1,-1表示反转列表

在这个问题中的要求以降序的顺序要求一个大小为10的整数list 。 所以,让我们在python中创build一个列表。

 # This meets the requirement. # But it is a bit harder to wrap one's head around this. right? >>> range(10-1, -1, -1) [9, 8, 7, 6, 5, 4, 3, 2, 1, 0] # let's find something that is a bit more self-explanatory. Sounds good? # ---------------------------------------------------- # This returns a list in ascending order. # Opposite of what the requirement called for. >>> range(10) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] # This returns an iterator in descending order. # Doesn't meet the requirement as it is not a list. >>> reversed(range(10)) <listreverseiterator object at 0x10e14e090> # This returns a list in descending order and meets the requirement >>> list(reversed(range(10))) [9, 8, 7, 6, 5, 4, 3, 2, 1, 0] 

除了可读性, reversed(range(n))似乎比range(n)[::-1]更快。

 $ python -m timeit "reversed(range(1000000000))" 1000000 loops, best of 3: 0.598 usec per loop $ python -m timeit "range(1000000000)[::-1]" 1000000 loops, best of 3: 0.945 usec per loop 

只是如果有人想知道:)

没有意义使用reverse作为范围方法可以返回反向列表。

当你迭代了n个项目并且想要replace由range(start, stop, step)返回的列表的顺序range(start, stop, step)你必须使用范围的第三个参数来标识step并将其设置为-1 ,其他参数也应该相应地调整:

  1. 提供停止参数为-1停止 -1的前一个值, stop等于0 )。
  2. 作为开始参数使用n-1

所以等于(n)的范围是相反的:

 n = 10 print range(n-1,-1,-1) #[9, 8, 7, 6, 5, 4, 3, 2, 1, 0] 

我相信这可以帮助,

 range(5)[::-1] 

下面是用法:

 for i in range(5)[::-1]: print i 
 range(9,0,-1) [9, 8, 7, 6, 5, 4, 3, 2, 1] 

您可以使用范围()BIF打印反向数字像,

 for number in range ( 10 , 0 , -1 ) : print ( number ) 

产量将是[10,9,8,7,6,5,4,3,2,1]

范围() – 范围(开始,结束,递增/递减),其中开始是包含性的,结束是排他性的,增量可以是任何数字,并像步骤

对于那些对迄今收集的选项“效率”感兴趣的人…

Jaime RGP的回答让我重新启动了计算机,计时之后, Jason按照我自己的build议(通过评论)逐字地解决了一些“有挑战性”的解决scheme。 为了避免好奇你停工,我在这里介绍我的结果(最坏的优先):

杰森的答案 (也许只是一个列表理解力的游览):

 $ python -m timeit "[9-i for i in range(10)]" 1000000 loops, best of 3: 1.54 usec per loop 

martineau的答案 (如果您熟悉扩展切片语法,则可读):

 $ python -m timeit "range(10)[::-1]" 1000000 loops, best of 3: 0.743 usec per loop 

MichałŠrajer的答案 (被接受的答案 ,非常可读):

 $ python -m timeit "reversed(range(10))" 1000000 loops, best of 3: 0.538 usec per loop 

贝恩的回答 (当时的第一个,但很粗略):

 $ python -m timeit "range(9,-1,-1)" 1000000 loops, best of 3: 0.401 usec per loop 

最后一个选项很容易记住,使用Val Neekman的range(n-1,-1,-1)表示法。

无[:: – 1]或反转使用 –

 def reverse(text): result = [] for index in range(len(text)-1,-1,-1): c = text[index] result.append(c) return ''.join(result) print reverse("python!") 
 [9-i for i in range(10)] [9, 8, 7, 6, 5, 4, 3, 2, 1, 0] 

您不一定需要使用范围函数,您可以简单地执行列表[:: – 1],该列表应该以相反的顺序快速返回列表,而不使用任何添加。

假设你有一个列表调用它a = {1,2,3,4,5}现在,如果你想打印出反向的列表,只需使用下面的代码。

 a.reverse for i in a: print(i) 

我知道你问使用范围,但已经回答。

 range(9,-1,-1) [9, 8, 7, 6, 5, 4, 3, 2, 1, 0] 

是正确的forms。 如果你使用

 reversed(range(10)) 

你不会得到0的情况。 例如,说你的10不是一个幻数,你用来查找的variables是从反向开始的。 如果你的情况是0,反转(范围(0))不会执行哪个是错误的,如果你偶然有一个单一的对象在零指数。