如何在Python中使用range()生成以下列表?
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
如何在Python中使用range()生成以下列表?
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
当前回答
我相信这有帮助,
range(5)[::-1]
用法如下:
for i in range(5)[::-1]:
print i
其他回答
在python3中经常被问到的问题是range(9, -1, -1)是否比reverse (range(10))更好?在其他语言中使用迭代器的人立即倾向于认为reversed()必须缓存所有值,然后以相反的顺序返回。问题是,如果对象只是一个迭代器,Python的reversed()操作符就不起作用。对象必须具有以下两个中的一个才能使reversed()工作:
通过[]支持len()和整型索引 或者实现__reversed__()方法。
如果你尝试在一个以上都没有的对象上使用reversed(),那么你会得到:
>>> [reversed((x for x in range(10)))]
TypeError: 'generator' object is not reversible
所以简而言之,Python的reversed()只意味着对数组这样的对象,所以它应该具有与前向迭代相同的性能。
但是range()呢?那不是发电机吗?在python3中,它是生成器,但包装在实现上述两种方法的类中。因此range(100000)不会占用大量内存,但它仍然支持高效的索引和倒序。
因此,总的来说,您可以使用reversed(range(10))而不会对性能造成任何影响。
[9-i for i in range(10)]
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
range(9,-1,-1)
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
是正确的形式。如果你使用
reversed(range(10))
你不会得到0的情况。例如,假设你的10不是一个神奇的数字,也不是一个你用来反向查找的变量。如果你的n case是0,则反转(range(0))将不会执行,如果你碰巧在0索引中有一个对象,这是错误的。
for i in range(8, 0, -1)
将解决这个问题。它将输出8到1,而-1表示反向列表
使用reverse没有意义,因为range函数可以返回反向列表。
当你迭代n个项目,想要替换range(start, stop, step)返回的列表顺序时,你必须使用range中标识step的第三个参数,并将其设置为-1,其他参数也需要相应调整:
提供stop参数为-1(它之前的stop -1值,stop等于0)。 作为开始参数使用n-1。
因此,range(n)的倒序等价为:
n = 10
print range(n-1,-1,-1)
#[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]