Day40:列表的排序
在 Python 中,排序是处理列表数据时常用的一种操作。排序可以帮助我们按照一定的规则(如升序或降序)对列表中的元素进行排列。Python 提供了内置的排序方法 sort()
和 sorted()
来实现这一功能。
1. 使用 sort()
方法排序
1.1 sort()
方法简介
sort()
是列表对象的一个方法,它会修改原列表,并将列表中的元素按照指定的顺序排序。默认情况下,sort()
会将列表中的元素按升序排列(对于数字来说是从小到大,对于字符串来说是字母顺序)。
1.2 排序的基本用法
numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
numbers.sort() # 默认升序排列
print(numbers)
输出结果:
[1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]
在这个例子中,numbers.sort()
将列表中的元素按升序排序。
1.3 降序排序
如果需要按降序排列列表中的元素,可以通过设置 reverse=True
参数来实现。
numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
numbers.sort(reverse=True) # 降序排列
print(numbers)
输出结果:
[9, 6, 5, 5, 5, 4, 3, 3, 2, 1, 1]
在这个例子中,numbers.sort(reverse=True)
将列表中的元素按降序排序。
2. 使用 sorted()
函数排序
2.1 sorted()
函数简介
与 sort()
方法不同,sorted()
函数会返回一个新的已排序列表,而不会修改原列表。sorted()
函数也可以接受一个可选参数 reverse
,用于指定排序的顺序。
2.2 排序的基本用法
numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
sorted_numbers = sorted(numbers) # 默认升序排列
print(sorted_numbers)
输出结果:
[1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]
在这个例子中,sorted(numbers)
返回了一个新的已排序列表,原列表 numbers
没有被修改。
2.3 降序排序
numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
sorted_numbers = sorted(numbers, reverse=True) # 降序排列
print(sorted_numbers)
输出结果:
[9, 6, 5, 5, 5, 4, 3, 3, 2, 1, 1]
在这个例子中,sorted(numbers, reverse=True)
返回了一个按降序排列的新列表。
3. 排序的其他参数
3.1 key
参数
除了 reverse
参数,sort()
和 sorted()
还可以接受一个 key
参数。key
是一个函数,它用于指定排序时的排序依据。每个元素都会被传递给 key
函数,key
函数返回的值将作为排序的标准。
3.2 按字符串的长度排序
words = ["banana", "apple", "cherry", "date"]
words.sort(key=len) # 根据字符串的长度进行排序
print(words)
输出结果:
['date', 'apple', 'banana', 'cherry']
在这个例子中,key=len
表示按照每个字符串的长度来排序。len()
函数计算字符串的长度。
3.3 按自定义的排序规则
我们还可以传入一个自定义的函数作为 key
,以实现复杂的排序规则。例如,按照字符串的最后一个字母进行排序:
words = ["banana", "apple", "cherry", "date"]
words.sort(key=lambda word: word[-1]) # 按照每个字符串的最后一个字母排序
print(words)
输出结果:
['banana', 'apple', 'date', 'cherry']
在这个例子中,key=lambda word: word[-1]
表示按照每个字符串的最后一个字母进行排序。
4. 对字典中的元素进行排序
如果我们有一个字典,且需要根据字典的值或键对字典进行排序,可以使用 sorted()
函数与 key
参数。
4.1 按照字典的键排序
scores = {"Alice": 88, "Bob": 75, "Charlie": 92, "David": 85}
sorted_by_key = sorted(scores.items(), key=lambda item: item[0]) # 按照键排序
print(sorted_by_key)
输出结果:
[('Alice', 88), ('Bob', 75), ('Charlie', 92), ('David', 85)]
4.2 按照字典的值排序
sorted_by_value = sorted(scores.items(), key=lambda item: item[1]) # 按照值排序
print(sorted_by_value)
输出结果:
[('Bob', 75), ('David', 85), ('Alice', 88), ('Charlie', 92)]
5. 排序的性能和注意事项
5.1 排序的时间复杂度
Python 中的排序算法采用的是 Timsort,它的时间复杂度为 O(n log n),这意味着它在大多数情况下表现得相当高效。排序操作通常比直接遍历或其他简单操作更耗时,尤其是当列表非常大时。
5.2 稳定性
Python 的排序算法是稳定的,这意味着如果两个元素在排序前相等,那么它们在排序后的顺序会保持一致。
6. 小结
在 Python 中,排序是一个非常常见的操作。通过 sort()
和 sorted()
方法,我们可以方便地对列表进行升序或降序排序。同时,我们还可以通过 key
参数自定义排序规则,并且 Python 的排序算法非常高效且稳定。
7. 课后练习
7.1 数字排序
编写一个程序,输入一组数字并将它们按升序和降序排序。
7.2 字符串排序
编写一个程序,输入一组字符串,并按字母顺序进行排序。
7.3 自定义排序规则
编写一个程序,输入一组字符串,并按每个字符串的长度进行排序。
7.4 排序字典
编写一个程序,输入一个字典,按字典的键或值进行排序。