在 Python 中,列表排序有两种常用方法:


1. list.sort() 方法

  • 功能:原地排序(直接修改原列表)
  • 语法
    list.sort(key=None, reverse=False)
    
  • 参数
    • key:排序依据的函数(如 key=len 按长度排序)
    • reverse:是否降序(True 为降序,False 为升序)
  • 返回值None(直接修改原列表)
  • 示例
    nums = [3, 1, 4, 1, 5, 9]
    nums.sort()  # 原地排序
    print(nums)  # 输出: [1, 1, 3, 4, 5, 9]
    

2. sorted() 函数

  • 功能:返回新排序列表(不修改原列表)
  • 语法
    sorted(iterable, key=None, reverse=False)
    
  • 参数
    • iterable:可迭代对象(如列表、元组、字符串等)
    • key:排序依据的函数
    • reverse:是否降序
  • 返回值:新排序列表
  • 示例
    nums = [3, 1, 4, 1, 5, 9]
    sorted_nums = sorted(nums)  # 返回新列表
    print(sorted_nums)  # 输出: [1, 1, 3, 4, 5, 9]
    print(nums)         # 原列表不变: [3, 1, 4, 1, 5, 9]
    

两种方法对比

特性 list.sort() sorted()
是否修改原列表 ✅ 是(原地排序) ❌ 否(返回新列表)
返回值 None 新排序列表
适用场景 需要直接修改原列表时 需要保留原列表时
性能 稍快(无需创建新列表) 稍慢(需创建新列表)
灵活性 只能用于列表 可用于任何可迭代对象

高级用法示例

  1. 按字符串长度排序

    words = ["apple", "banana", "cherry"]
    words.sort(key=len)  # 按长度升序
    print(words)  # 输出: ['apple', 'cherry', 'banana']
    
  2. 按字典值排序

    data = [{"name": "Alice", "age": 25}, {"name": "Bob", "age": 20}]
    sorted_data = sorted(data, key=lambda x: x["age"])  # 按年龄升序
    print(sorted_data)  # 输出: [{'name': 'Bob', 'age': 20}, {'name': 'Alice', 'age': 25}]
    
  3. 多条件排序

    students = [("Alice", 25), ("Bob", 20), ("Charlie", 20)]
    students.sort(key=lambda x: (x[1], x[0]))  # 先按年龄,再按名字
    print(students)  # 输出: [('Bob', 20), ('Charlie', 20), ('Alice', 25)]
    

总结

  • 需要修改原列表 → 用 list.sort()
  • 需要保留原列表 → 用 sorted()
  • 复杂排序 → 使用 key 参数指定排序规则