8.1 列表排序
在 Python 中排序列表是一个重要的操作,可以让数据更方便分析或展示。Python 提供了几种排序列表的方法,根据不同的需求和结果的要求,这些方法都能派上用场。
方法 sort()
方法 sort() 会在原地对列表进行排序,也就是说它会修改原来的列表。它非常高效,并且可以通过参数来调整排序方式。
numbers = [5, 2, 9, 1]
numbers.sort()
print(numbers) # 输出 [1, 2, 5, 9]
你可以通过设置参数 reverse=True 来把列表按逆序排序。
numbers = [5, 2, 9, 1]
numbers.sort(reverse=True)
print(numbers) # 输出 [9, 5, 2, 1]
函数 sorted()
函数 sorted() 会创建一个新的列表,这个新列表是原列表的排序版本。原列表不会被改变,这在你需要保留原数据时特别方便,所以往往选择用 sorted()。
numbers = [5, 2, 9, 1]
sorted_numbers = sorted(numbers)
print(sorted_numbers) # 输出 [1, 2, 5, 9]
print(numbers) # 原列表未改变 [5, 2, 9, 1]
要记住,sort() 会改变原始列表,而 sorted() 会返回一个新的排序后的列表,保持原始列表不变。如果你需要对数据就地修改,使用 sort();如果你想保持数据的原始顺序,使用 sorted()。
8.2 按键排序
有时候你可能需要复杂的排序方案,或者忽略某些参数来排序。在这种情况下,“按键排序”就可以派上用场。你需要在 sort() 方法或 sorted() 函数中传入一个特殊的参数 —— key。
作为 key 参数的值,你需要传入一个在比较元素时要用的函数。
忽略大小写的字符串比较
所有字符串在比较前都会转成小写
alist = ["banana", "Orange", "Kiwi", "cherry"]
alist.sort(key=str.lower)
print(alist) # 输出 ['banana', 'cherry', 'Kiwi', 'Orange']
排序包含元组的列表的例子
假设你有一个学生名单,每个元素是一个包含学生姓名和成绩的元组 (tuple)。你想要通过学生的成绩来排序:
students = [('Alice', 88), ('Bob', 75), ('Carol', 96)]
def get_grade(student):
return student[1]
students.sort(key=get_grade)
print(students) # 输出 [('Bob', 75), ('Alice', 88), ('Carol', 96)]
排序包含字典的列表的例子
或者你有一个字典列表,每个字典包含学生的信息。为了按成绩对它们进行排序,你需要写这样的代码:
students = [
{'name': 'Alice', 'grade': 88},
{'name': 'Bob', 'grade': 75},
{'name': 'Carol', 'grade': 96}
]
def get_grade(student):
return student['grade']
sorted_students = sorted(students, key=get_grade)
print(sorted_students) # 输出 [{'name': 'Bob', 'grade': 75}, {'name': 'Alice', 'grade': 88}, {'name': 'Carol', 'grade': 96}]
GO TO FULL VERSION