你可以在不使用列表的情况下向后迭代一个数字吗?

时间:2011-02-27 22:07:27

标签: python list iteration

如何在不使用Python 3中的列表的情况下向后迭代数字?

使用列表,我可能会做类似的事情:

li = list(range(100))
for i in li[::-1]:
    print(i)

这是一个很好的解决方案,但它不适用于大量的数据。 现在,我正在尝试用大数字向后迭代一个数字,但是发生溢出错误,所以我想我需要以某种方式找到一种方法来向后迭代一个数字而不使用列表。

有什么办法吗?

4 个答案:

答案 0 :(得分:11)

提供__reversed__()特殊方法的迭代器也支持反向迭代。在Python 3.x中,range()迭代器具有此方法,因此您也可以使用

for i in reversed(range(100)):
    print(i)

在Python 2.x中,xarnge()允许反向迭代:

for i in reversed(xrange(100)):
    print i

两个版本都不会将整个列表存储在内存中。

答案 1 :(得分:2)

<德尔>通常?不.Python的迭代器协议只支持前向迭代。(编辑:结果证明这是不正确的,请参阅Sven Marnach的回答。)

但是,您可以撤消range(n, m)range(m-1, n-1, -1)(-1是丑陋的,是的,但由于range返回半开范围,这是必要的。)

答案 2 :(得分:1)

尝试使用范围]并逐步降低......

for i in range(100, 0, -1):

[update]我刚刚注意到你说的是Python 3,在这种情况下你可以使用range而不是xrange。

答案 3 :(得分:1)

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