如何在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(10)[::-1],它和range(9, -1, -1)是一样的,而且可以说可读性更强(如果你熟悉常见的序列[::-1]Python习语)。
其他回答
使用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]
我认为许多人(包括我自己)可能更感兴趣的是按相反的顺序遍历现有列表的常见情况,正如标题中所述,而不仅仅是为这种遍历生成索引。
尽管在这种情况下,所有的正确答案都是完全正确的,但我想指出的是,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测试
不带[::-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!")
使用'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生成器)转换为列表。
获取对给定输入整数进行反转的反向输出。 例子 输入:5
答案应该是:
54321
1234
321
12
1
答案是:
def get_val(n):
d = ''.join(str(i) for i in range(n, 0, -1))
print(d)
print(d[::-1][:-1])
if n - 1>1:
return get_vale(n-1)
get_val(12)