我必须使用向后循环:
for i in range(len(my_ls))[::-1]:
print i
但有些列表有length = 1
(如['one']
)。
因此,口译员根本不打印任何内容。
尽管如此,在python自己的shell中它可以正常工作,并且按照计划打印0。
任何想法如何克服这个问题?
我在Debian Squeeze上运行Python 2.6.6。
答案 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的答案之间的区别在于:
.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
的尴尬参与。