遍历不同长度的列表

0 投票
3 回答
728 浏览
提问于 2025-04-17 07:21

我需要使用一个反向循环:

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

撰写回答