如何在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(9,-1,-1)
    [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

是正确的形式。如果你使用

reversed(range(10))

你不会得到0的情况。例如,假设你的10不是一个神奇的数字,也不是一个你用来反向查找的变量。如果你的n case是0,则反转(range(0))将不会执行,如果你碰巧在0索引中有一个对象,这是错误的。

你可以用range() BIF打印反向数字,比如,

for number in range ( 10 , 0 , -1 ) :
    print ( number ) 

输出将是 (10、9、8、7、6、5、4、3、2、1]

Range() -范围(开始,结束,递增/递减) 哪里开始是包括,结束是排他和增量可以是任何数字和行为像步骤

我认为许多人(包括我自己)可能更感兴趣的是按相反的顺序遍历现有列表的常见情况,正如标题中所述,而不仅仅是为这种遍历生成索引。

尽管在这种情况下,所有的正确答案都是完全正确的,但我想指出的是,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测试

获取对给定输入整数进行反转的反向输出。 例子 输入: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)
    

在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))而不会对性能造成任何影响。