reversed() 是 Python 的内置函数,用于反转序列对象的顺序,返回一个反向迭代器对象。其主要特性和用法如下:
核心功能与语法
reversed(sequence)
- 参数:支持任何实现
__reversed__()方法或遵循序列协议(支持__len__()和__getitem__())的对象 - 返回值:生成反向元素的迭代器(非列表)
支持的数据类型
-
基础序列类型
列表反转 list(reversed([1, 2, 3])) [3, 2, 1] 元组反转 tuple(reversed((4, 5, 6))) (6, 5, 4) 字符串反转 ''.join(reversed("Python")) 'nohtyP' -
范围对象
list(reversed(range(0, 5))) [4, 3, 2, 1, 0] -
自定义序列(需实现序列协议)
class CountDown: def __init__(self, start): self.start = start def __len__(self): return self.start def __getitem__(self, index): return self.start - index list(reversed(CountDown(3))) [1, 2, 3]
与切片反转的对比
| 特性 | reversed() |
切片 [::-1]
|
|---|---|---|
| 返回值类型 | 迭代器对象 | 新列表(原始序列的副本) |
| 内存占用 | 惰性计算(极低) | 创建完整副本(可能高) |
| 适用场景 | 大文件/大序列的惰性反向遍历 | 需直接获取反转结果的小序列 |
| 支持自定义类 | ✅(实现序列协议或 __reversed__) |
❌(仅内置序列) |
典型使用场景
-
反向遍历序列
for char in reversed("spam"): print(char) 依次输出: m → a → p → s -
高效处理大型文件(避免内存溢出)
with open('large_file.txt') as f: for line in reversed(list(f)): 仅当文件较小时可行 process(line) 更优方案:使用 deque 或外部排序 -
创建反转副本
original = [10, 20, 30] reversed_copy = list(reversed(original)) [30, 20, 10]
注意事项
- 不可直接打印:迭代器需转换为列表/元组才能直观显示内容
- 一次性使用:迭代器遍历后即耗尽,再次使用需重新创建
- 不支持非序列:如字典、集合等无序类型会引发
TypeError
示例:高效反转大列表
big_list = list(range(10**6)) rev_iter = reversed(big_list) 瞬间完成(不复制数据) next(rev_iter) 999999