Python 中 for循环中的reversed:深入理解与应用实践
在 Python 的 for
循环里,reversed()
的作用就是让你 反向遍历 一个序列,而不必自己计算索引或手动倒序。它的主要特点和用法有:
-
反向遍历列表、元组、字符串等序列
nums = [1, 2, 3, 4, 5] for x in reversed(nums): print(x) # 输出:5 4 3 2 1
相当于你手动写
for i in range(len(nums)-1, -1, -1): print(nums[i])
但更简洁、可读性更强。
-
不额外复制序列(或只做最小化复制)
- 对于内置的序列类型(如
list
、tuple
、str
),reversed()
会调用它们的__reversed__()
方法,直接返回一个反向迭代器,不会申请新内存去存放倒序列表。 - 如果一个自定义序列没有实现
__reversed__()
,reversed()
会退而使用__len__()
+__getitem__()
,按索引倒序访问,也无需一次性复制整个对象。
- 对于内置的序列类型(如
-
与
range()
配合:倒序索引或倒序数字序列# 常见做法:range(start, stop, step) for i in range(10, 0, -1): print(i) # 等价地,你也可以先生成 range,再 reversed for i in reversed(range(1, 11)): print(i)
-
用在
enumerate()
上:既要索引又要倒序items = ['a','b','c','d'] for idx, val in enumerate(reversed(items), start=1): print(idx, val) # 输出: # 1 d # 2 c # 3 b # 4 a
-
和其他迭代器一起链式使用
import itertools data = [1,2,3,4,5,6] # 先分块,再倒序遍历每块 for block in itertools.chunked(data, 2): for x in reversed(block): print(x)
小结
- 何时用? 只要想把现有序列按相反顺序访问,就用
reversed()
,不用自己算索引或生成倒序 copy。 - 效率? 对内置序列几乎零额外开销,对自定义序列也只是按需索引,没有完整复制。
- 可读性? 一行搞定倒序,代码更简洁直观。