核心概念:sort() 和 sorted() 的比较
用法 | 列表的方法 | 内置函数 |
返回值 | None(原地排序,不返回值) | 返回新的排序后的列表 |
作用对象 | 仅限于列表 | 任何可迭代对象(如列表、元组、集合、字符串等)但是串列里面的资料必须都是相同型态才能进行排序 |
改变原始数据 | 会改变原始列表 | 不会改变原始数据 |
排序方式 | 可以升序或降序排序 | 可以升序或降序排序 |
使用 key 参数 | 支持 | 支持 |
其他 | 字元顺序排列会由小至大(升序):A->Z->a->z |
.sort() 列表的方法
语法范例
# 创建一个列表
numbers = [5, 2, 9, 1, 5, 6]
# 使用 sort() 进行升序排序
numbers.sort()
print(numbers) # 输出:[1, 2, 5, 5, 6, 9]
# 使用 sort() 进行降序排序
numbers.sort(reverse=True)
print(numbers) # 输出:[9, 6, 5, 5, 2, 1]
# 使用 key 参数来根据绝对值排序
numbers = [-5, -1, 2, -3]
numbers.sort(key=abs)
print(numbers) # 输出:[-1, 2, -3, -5]
sorted(list) 函数
语法
sorted(iterable, key=None, reverse=False)
参数:iterable:要排序的可迭代对象。key:可选,指定一个函数,用于从每个可迭代元素中提取一个用于比较的键。reverse:可选,布林值,若设为 True,则将列表按降序排序。范例:
lst= [\'four\',\'9\',\'10\']
sorted_lst = sorted(lst)
print(sorted_lst)
#[\'10\',\'9\',\'four\']
what 什么是 key 参数?:客制化排序的利器
- 一个函数: key 参数接受一个可调用对象,通常是一个函数。
- 排序依据: 这个函数会对序列中的每个元素进行操作,并返回一个值。sorted() 函数会根据这些返回值来进行排序。
why 为什么要使用 key 参数?
- 复杂排序: 当我们需要根据元素的某个特定属性或计算结果来排序时,key 参数就显得非常有用。
- 自定义排序逻辑: 我们可以完全自定义排序的规则,而不仅仅是按照元素本身的大小进行排序。
- 用法:
- len:按长度排序
- lambda:自定义排序逻辑
how 如何使用 key 参数?
fruits = [\'banana\', \'apple\', \'orange\', \'grape\']
sorted_fruits = sorted(fruits, key=len)
print(sorted_fruits) # 输出: [\'apple\', \'grape\', \'banana\', \'orange\']
这里,len 函数会返回每个字符串的长度,sorted() 函数会根据返回的长度进行排序。
students = [
{\'name\': \'Alice\', \'age\': 25},
{\'name\': \'Bob\', \'age\': 23},
{\'name\': \'Charlie\', \'age\': 27}
]
sorted_students = sorted(students, key=lambda x: x[\'age\'])
print(sorted_students)
# 按照年龄升序排序
#[{\'name\': \'Bob\', \'age\': 23}, {\'name\': \'Alice\', \'age\': 25}, {\'name\': \'Charlie\', \'age\': 27}]
这里,lambda x: x[\'age\'] 是一个匿名函数,它会返回字典中 age 键对应的值。sorted() 函数会根据返回的年龄值进行排序。
data = [(1, \'a\'), (3, \'c\'), (2, \'b\')]
sorted_data = sorted(data, key=lambda x: (x[1], x[0]))
print(sorted_data)
# 首先按第二个元素排序,然后按第一个元素排序
#[(1, \'a\'), (2, \'b\'), (3, \'c\')]
这里,lambda x: (x[1], x[0]) 返回一个元组,包含了原元组的第二个和第一个元素。sorted() 函数会先根据元组的第一个元素(即原元组的第二个元素)进行排序,如果第一个元素相等,再根据第二个元素(即原元组的第一个元素)进行排序。
如果是要sorted dictionary 是如何运用?
在 Python 中,字典(dictionary)本身是一种无序的数据结构,因此无法直接对字典进行排序。然而,我们可以使用 sorted() 函数来根据字典的键或值进行排序,并返回排序后的结果(通常以元组列表的形式)。这样我们就能依据不同的需求对字典进行灵活的排序操作。
- 按字典中键排序sorted(my_dict):要根据字典的键进行升序排序,可以直接对字典的键使用 sorted():
my_dict = {\'apple\': 3, \'banana\': 1, \'cherry\': 2}
sorted_by_keys = sorted(my_dict) # 只返回排序后的键
print(sorted_by_keys) # 输出:[\'apple\', \'banana\', \'cherry\']
- 按字典中的值value排序:
students = [
{\'name\': \'Alice\', \'age\': 25},
{\'name\': \'Bob\', \'age\': 23},
{\'name\': \'Charlie\', \'age\': 27}
]
sorted_students = sorted(students, key=lambda x: x[\'age\'])
print(sorted_students)
# 按照年龄升序排序
#[{\'name\': \'Bob\', \'age\': 23}, {\'name\': \'Alice\', \'age\': 25}, {\'name\': \'Charlie\', \'age\': 27}]
这里,lambda x: x[\'age\'] 是一个匿名函数,它会返回字典中 age 键对应的值。sorted() 函数会根据返回的年龄值进行排序。
- 按**键-值- 对排序.items():
sorted_dict_by_keys = dict(sorted(my_dict.items()))
print(sorted_dict_by_keys) # 输出:{\'apple\': 3, \'banana\': 1, \'cherry\': 2}
为什么可以考虑只使用 sorted()?
1.不改变原始数据:sorted() 不会修改原始的可迭代对象,它会返回一个新的已排序列表。这对于保持数据完整性特别重要,避免无意中改变了原始数据。
2.适用于所有可迭代对象:sorted() 不仅适用于列表,还可以对元组、集合、字符串等进行排序,而 sort() 只能用于列表。这使得 sorted() 更加通用。
3.灵活性:无论你是对列表进行排序,还是对其他不可变对象(如 tuple、set)进行排序,sorted() 都能应对。而且,它与 key 和 reverse 参数的配合使用也相当灵活。
什么情况下使用 sort()?
尽管 sorted() 很好,但在某些情况下使用 sort() 仍有它的价值:
- 性能考量:如果你不需要保留原始列表,并且想避免创建一个新的列表,sort() 会更高效,因为它是就地排序,不需要分配额外的内存来存放新的列表。
- 列表操作:当你确定只对列表进行操作,而且不在意原始列表的变化,sort() 是一个简洁且高效的选择。
总结
使用 sort():
当你想对一个列表进行就地排序时,可以使用 sort() 方法。这种方法适合在你不需要保留原始列表的情况下进行排序。
使用 sorted():
当你需要对其他可迭代对象进行排序,或需要保留原始数据时,使用 sorted() 函数。sorted() 是更通用和灵活的选择,因为它可以用于多种类型的数据。