用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
的前一个值,stop
等于0
)。 - 作为开始参数使用
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))不会执行哪个是错误的,如果你偶然有一个单一的对象在零指数。