如何在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'内置函数。签名是范围(start, stop, step)。这将产生一个产生数字的序列,从start开始,如果到达stop就结束,不包括stop。
>>> range(9,-1,-1)
range(9, -1, -1)
>>> list(range(9,-1,-1))
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
>>> list(range(-2, 6, 2))
[-2, 0, 2, 4]
列表构造函数将range(一个python生成器)转换为列表。
其他回答
你可以使用range(10)[::-1],它和range(9, -1, -1)是一样的,而且可以说可读性更强(如果你熟悉常见的序列[::-1]Python习语)。
对于那些对目前收集到的选项的“效率”感兴趣的人……
Jaime RGP的回答让我重新启动了我的电脑,在计时之后,詹森按照我自己的建议(通过评论)进行了一些“具有挑战性”的解决方案。为了避免你的好奇心,我在这里列出了我的结果(最差的第一):[1]
Jason的回答(也许只是对列表理解能力的一次探索):
$ python -m timeit "[9-i for i in range(10)]"
1000000 loops, best of 3: 1.54 usec per loop
马蒂诺的回答(如果你熟悉扩展切片语法,可以读懂):
$ python -m timeit "range(10)[::-1]"
1000000 loops, best of 3: 0.743 usec per loop
michakovsky Šrajer的回答(公认的答案,非常有可读性):
$ python -m timeit "reversed(range(10))"
1000000 loops, best of 3: 0.538 usec per loop
Bene的回答(第一个,但在当时非常粗略):
$ python -m timeit "range(9,-1,-1)"
1000000 loops, best of 3: 0.401 usec per loop
最后一个选项很容易记住,使用Val Neekman的范围(n-1,-1,-1)表示法。
正如Karl Knechtel所评论的,这里给出的结果是依赖于版本的,并参考Python 3。X版本在回答这个问题时是稳定的。
使用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]
使用reversed()函数:
reversed(range(10))
这更有意义。
更新:
如果你想让它是一个列表(正如btk指出的那样):
list(reversed(range(10)))
更新:
如果您希望仅使用range来实现相同的结果,则可以使用它的所有参数。范围(开始,停止,步长)
例如,要生成一个列表[5,4,3,2,1,0],您可以使用以下命令:
range(5, -1, -1)
这可能不太直观,但正如评论所提到的,这是更有效的,并且是反转列表的正确使用范围。
你不一定需要使用range函数,你可以简单地使用list[::-1],它应该以相反的顺序快速返回列表,而不使用任何添加。