当前位置:首页 > Python > 正文

Python sort()方法完全指南 - 列表排序详解与示例 | Python教程

Python sort()方法完全指南:列表排序详解

作者:Python编程专家 更新日期:2023年10月15日

1. sort()方法概述

Python中的sort()是列表(list)对象的内置方法,用于对列表进行原地排序(即直接修改原列表,不返回新列表)。

基本语法:

list.sort(key=None, reverse=False)

参数说明:

  • key:可选参数,用于指定排序依据的函数
  • reverse:可选参数,默认为False(升序),设为True则为降序

2. 基本排序方法

对数字列表和字符串列表进行排序:

# 数字列表排序
numbers = [3, 1, 4, 1, 5, 9, 2, 6]
numbers.sort()
print(numbers)  # 输出: [1, 1, 2, 3, 4, 5, 6, 9]

# 字符串列表排序
fruits = ['banana', 'apple', 'date', 'cherry']
fruits.sort()
print(fruits)  # 输出: ['apple', 'banana', 'cherry', 'date']

3. 降序排序

使用reverse=True参数实现降序排序:

# 数字降序排序
numbers = [3, 1, 4, 1, 5, 9, 2, 6]
numbers.sort(reverse=True)
print(numbers)  # 输出: [9, 6, 5, 4, 3, 2, 1, 1]

# 字符串降序排序
fruits = ['banana', 'apple', 'date', 'cherry']
fruits.sort(reverse=True)
print(fruits)  # 输出: ['date', 'cherry', 'banana', 'apple']

4. 自定义排序规则

使用key参数实现自定义排序:

# 按字符串长度排序
words = ['apple', 'banana', 'cherry', 'date', 'fig']
words.sort(key=len)
print(words)  # 输出: ['fig', 'date', 'apple', 'banana', 'cherry']

# 按绝对值大小排序
numbers = [-5, 3, -2, 8, -1, 4]
numbers.sort(key=abs)
print(numbers)  # 输出: [-1, -2, 3, 4, -5, 8]

# 自定义函数排序
def get_second_element(item):
    return item[1]

pairs = [(1, 5), (3, 2), (2, 8), (4, 1)]
pairs.sort(key=get_second_element)
print(pairs)  # 输出: [(4, 1), (3, 2), (1, 5), (2, 8)]

5. 复杂数据结构排序

对字典列表等复杂数据结构进行排序:

# 字典列表按特定键排序
students = [
    {'name': 'Alice', 'grade': 85},
    {'name': 'Bob', 'grade': 92},
    {'name': 'Charlie', 'grade': 78},
    {'name': 'David', 'grade': 95}
]

# 按成绩升序排序
students.sort(key=lambda x: x['grade'])
print("按成绩升序:")
for student in students:
    print(f"{student['name']}: {student['grade']}")

# 按名字降序排序
students.sort(key=lambda x: x['name'], reverse=True)
print("\n按名字降序:")
for student in students:
    print(f"{student['name']}: {student['grade']}")

# 多条件排序(先按成绩降序,成绩相同按名字升序)
students.sort(key=lambda x: (-x['grade'], x['name']))
print("\n多条件排序:")
for student in students:
    print(f"{student['name']}: {student['grade']}")

6. sort() vs sorted()

sort()方法

  • 列表的内置方法
  • 直接修改原列表
  • 不返回任何值(返回None)
  • 仅用于列表
  • 语法:list.sort()

sorted()函数

  • Python的内置函数
  • 不修改原列表,返回新列表
  • 可对任何可迭代对象排序
  • 返回排序后的新列表
  • 语法:sorted(iterable)

示例:

# 使用sort()
original = [3, 1, 4, 2]
original.sort()
print(original)  # 输出: [1, 2, 3, 4]

# 使用sorted()
original = [3, 1, 4, 2]
new_list = sorted(original)
print(original)   # 输出: [3, 1, 4, 2] (原列表未改变)
print(new_list)   # 输出: [1, 2, 3, 4]

7. 常见问题解答

Q1: sort()方法能否用于元组或字典?

不能。sort()是列表的内置方法,只能用于列表。要对元组排序,需使用sorted()函数:

my_tuple = (3, 1, 4, 2)
sorted_tuple = tuple(sorted(my_tuple))
print(sorted_tuple)  # 输出: (1, 2, 3, 4)

Q2: 如何对中文字符串列表排序?

使用locale模块或第三方库如pyuca:

import locale
locale.setlocale(locale.LC_COLLATE, 'zh_CN.UTF-8')

chinese_words = ['北京', '上海', '广州', '深圳']
chinese_words.sort(key=locale.strxfrm)
print(chinese_words)  # 输出: ['北京', '广州', '上海', '深圳']

Q3: sort()方法的时间复杂度是多少?

Python的sort()方法使用TimSort算法,平均和最坏情况时间复杂度均为O(n log n)。

总结

Python的sort()方法是处理列表排序的强大工具。关键点:

  • 使用sort()直接修改原列表,sorted()返回新列表
  • 通过reverse=True实现降序排序
  • 使用key参数自定义排序规则
  • 支持lambda表达式实现简洁的自定义排序
  • 可对复杂数据结构(如字典列表)进行多条件排序

掌握sort()方法能显著提高数据处理效率,是Python编程必备技能。

相关主题

sorted函数 lambda表达式 列表操作 Python数据结构 算法优化

发表评论