Python反序迭代一个序列(字符串、元组、列表等)

reversed()内置函数

1
2
for elem in reversed(seq):
print(elem) # do something with elem

reversed()函数的Python等价实现代码:

1
2
3
4
5
6
7
def reversed(seq):
if hasattr(seq, 'keys'):
raise ValueError('mappings do not support reverse iteration')
i = len(seq)
while i > 0:
i -= 1
yield seq[i]

注意,zip()enumerate()reversed()这三个内置函数(其实是类的构造方法)分别解决了三个基本的循环问题:并行迭代、计数迭代、反序迭代。

[::-1]扩展切片

1
2
for elem in seq[::-1]:
print(elem) # do something with elem

range(len(seq)-1, -1, -1)

1
2
3
for i in range(len(seq)-1, -1, -1):
elem = seq[i]
print(elem) # do something with elem

也可以用reversed()简明的替换上面语句:

1
2
3
for i in reversed(range(len(seq))):
elem = seq[i]
print(elem) # do something with elem

注意,在Python2中xrange返回的是迭代器,所以如在Python2中,迭代时用xrange取代range(迭代本就不需要先返回一个完整的列表)。

列表的reverse()方法

1
2
3
4
l = list(seq)
l.reverse()
for elem in l:
print(elem) # do something with elem
大师兄 wechat
欢迎关注我的微信公众号:Python大师兄