手记

Python 的内置函数 reversed

Python 的内置函数 reversed() 是一个用于序列反转的高效工具,它能够返回给定序列的反向迭代器。这个函数支持多种可迭代对象,包括列表、元组、字符串以及实现了 __reversed__() 方法的自定义对象。

详细说明:

  1. 基本用法

    seq = [1, 2, 3, 4]
    reversed_seq = reversed(seq)
    print(list(reversed_seq))  # 输出:[4, 3, 2, 1]
    
  2. 支持的数据类型

    • 列表:最常见的使用场景
    • 元组:返回一个反向的迭代器
    • 字符串:返回字符的逆序迭代器
    • range对象:从Python 3.7开始支持
    • 自定义对象:需要实现 __reversed__() 方法
  3. 重要特性

    • 惰性求值:返回的是迭代器而非列表,节省内存
    • 一次性使用:迭代器只能遍历一次,如需多次使用需要转换为列表
    • 不修改原序列:创建新的迭代器而不改变原序列
  4. 与切片反转的区别

    # reversed()方式
    reversed([1, 2, 3])  # 返回迭代器
    
    # 切片方式
    [1, 2, 3][::-1]  # 直接返回新列表
    
    • reversed() 更节省内存,特别适合处理大型序列
    • 切片会创建完整的新列表,占用更多内存
  5. 实际应用场景

    • 处理日志文件时逆向读取
    • 实现回文检测
    • 需要逆向遍历的算法实现
    • 处理DNA序列等需要反向操作的生物信息学应用
  6. 性能考虑

    • 对于列表,时间复杂度是O(1)
    • 实际遍历的时间复杂度是O(n)
    • 比创建反转副本更节省内存
  7. 注意事项

    • 不支持集合(set)和字典(dict)等无序集合
    • 对字典使用时,实际上是按键的逆序排列
    • 在Python 3.x中,reversed()返回的是迭代器对象,而不是列表
  8. 自定义对象支持

    class CountDown:
        def __init__(self, start):
            self.start = start
        
        def __reversed__(self):
            return iter(range(1, self.start+1))
    
    for i in reversed(CountDown(5)):
        print(i)  # 输出1到5
    

这个函数是Python函数式编程工具包中的重要组成部分,特别适合需要逆向处理序列而又不想修改原数据的场景。

0人推荐
随时随地看视频
慕课网APP