遍历不同长度的列表
我需要使用一个反向循环:
for i in range(len(my_ls))[::-1]:
print i
但是有些列表的 长度 = 1
(比如 ['one']
)。
因此,解释器根本不打印任何内容。
不过,在Python自己的命令行中,这个反向循环运行得很好,按预期打印出0。
有没有什么办法可以解决这个问题?
我在Debian Squeeze上运行Python 2.6.6。
3 个回答
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
。
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()
有优势!)。
希望这对你有帮助!
4
你能不能直接把列表传给 reversed()
[docs],然后遍历这个反向迭代器呢?
for x in reversed(lst):
print x