如何在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(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表示反向列表
range(9,-1,-1)
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
我认为许多人(包括我自己)可能更感兴趣的是按相反的顺序遍历现有列表的常见情况,正如标题中所述,而不仅仅是为这种遍历生成索引。
尽管在这种情况下,所有的正确答案都是完全正确的,但我想指出的是,Wolf的答案中所做的性能比较仅用于生成索引。因此,我为以相反的顺序遍历现有列表创建了类似的基准测试。
TL;DR a[::-1]是最快的。
注意:如果你想要更详细地分析不同的反转替代品及其性能,请查看这个很棒的答案。
先决条件:
a = list(range(10))
杰森的回答是:
%timeit [a[9-i] for i in range(10)]
1.27 µs ± 61.5 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
马提瑙的回答是:
%timeit a[::-1]
135 ns ± 4.07 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
Michal Šrajer的回答:
%timeit list(reversed(a))
374 ns ± 9.87 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
野猪的回答是:
%timeit [a[i] for i in range(9, -1, -1)]
1.09 µs ± 11.1 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
如您所见,在这种情况下不需要显式地生成索引,因此最快的方法是执行较少额外操作的方法。
注:我在JupyterLab中进行了测试,该实验室拥有方便的“魔法命令”%timeit。它使用标准时间。在引擎盖下计时。已为Python 3.7.3测试
假设你有一个列表,叫它 a = {1, 2, 3, 4, 5} 现在,如果你想反向打印列表,那么只需使用下面的代码。
a.reverse
for i in a:
print(i)
我知道你问使用范围,但它已经回答了。
你可以使用range(10)[::-1],它和range(9, -1, -1)是一样的,而且可以说可读性更强(如果你熟悉常见的序列[::-1]Python习语)。