通过不同长度的列表进行迭代

时间:2011-11-29 22:22:40

标签: python loops

我必须使用向后循环:

for i in range(len(my_ls))[::-1]:
    print i

但有些列表有length = 1(如['one'])。

因此,口译员根本不打印任何内容。

尽管如此,在python自己的shell中它可以正常工作,并且按照计划打印0。

任何想法如何克服这个问题?
我在Debian Squeeze上运行Python 2.6.6。

3 个答案:

答案 0 :(得分:4)

你能不能将列表传递给reversed()[docs]然后迭代生成的反向迭代器?

for x in reversed(lst):
    print x

答案 1 :(得分:1)

这是你想要实现的目标吗?

>>> li = ['one']
>>> for i in range(len(li)-1, -1, -1):
...    print li[i]
... 
one

编辑:我的答案和Acorn的答案之间的区别在于:

  • Acorn的方法[使用.reverse()]修改列表
  • 使用reversed()将创建一个迭代器对象
  • 我的方法没有执行前两个
  • 中的任何一个

在python中使用.reverse()reversed()更加惯用。但是range参数也可以给你这种可能性(记忆方面我不确定我的方法是否比reversed()有任何优势!)。

HTH!

答案 2 :(得分:0)

首先,你要打印的所有内容都是从范围的末尾开始的每个项目的偏移量,而不是列表中的项目。

范围看起来像是在尝试用Python编写C语言。

你想要的是这样的:

>>> l = ['one']
>>> for each in l[-1::-1]:
>>>    print each
...
one
>>> l.append('two')
>>> for each in l[-1::-1]:
>>>    print each
...
two
one

构造for each in l[-1::-1]从列表末尾迭代到列表的开头,无论列表大小如何,都没有range的尴尬参与。