Python中的sorted()函数
Python中的sorted()函数被广泛用于对列表、元组、字典等数据结构进行排序。本文将介绍sorted()函数的用法、参数和返回值,并讲述一些常用的排序技巧和注意事项。
一、sorted()函数的用法
sorted()函数的基本语法如下:
sorted(iterable, *, key=None, reverse=False)
其中,iterable是要排序的列表、元组、字典、集合等可迭代对象;key和reverse是可选参数。
二、sorted()函数的参数
1. iterable:要排序的可迭代对象,可以是列表、元组、字典或集合等。
2. key:用于排序的函数,可以是自定义函数或lambda表达式。默认为None,表示按元素大小排序。
3. reverse:默认为False,表示升序排序。如果设置为True,则表示降序排序。
三、sorted()函数的返回值
sorted()函数返回的是一个新的排好序的列表。
四、常用排序技巧
1. 按元素大小排序
默认情况下,sorted()函数会按元素大小升序排列。例如:
>>> nums = [4, 2, 1, 3]
>>> sorted_nums = sorted(nums)
>>> print(sorted_nums)
[1, 2, 3, 4]
2. 按照指定规则排序
如果要按照指定规则排序,则需要使用key参数指定排序函数。例如,按字符串长度排序:
>>> words = ['apple', 'banana', 'orange', 'peach']
>>> sorted_words = sorted(words, key=lambda x: len(x))
>>> print(sorted_words)
['apple', 'peach', 'banana', 'orange']
上面的代码中,lambda表达式x:len(x)返回字符串x的长度,按照长度升序排序。
3. 多条件排序
如果要按多个条件排序,可以使用元组。例如,按照成绩降序排列,如果成绩相同则按名字升序排列:
>>> students = [('Tom', 80), ('Jerry', 90), ('Bob', 80), ('Alice', 70)]
>>> sorted_students = sorted(students, key=lambda x: (-x[1], x[0]))
>>> print(sorted_students)
[('Jerry', 90), ('Bob', 80), ('Tom', 80), ('Alice', 70)]
上面的代码中,key函数返回一个元组, 个元素是成绩的相反数(即降序排列),第二个元素是姓名的升序排列。
4. 字典排序
如果要按字典的键或值排序,可以使用字典的items()方法和sorted()函数的key参数。例如,按字典键升序排列:
>>> score_dict = {'Tom': 80, 'Jerry': 90, 'Bob': 80, 'Alice': 70}
>>> sorted_dict = sorted(score_dict.items(), key=lambda x: x[0])
>>> print(sorted_dict)
[('Alice', 70), ('Bob', 80), ('Jerry', 90), ('Tom', 80)]
上面的代码中,score_dict.items()返回字典的键值对元组,按照键的大小升序排列。
5. 列表倒序排序
如果要将列表倒序排列,则可以使用reverse参数。例如:
>>> nums = [4, 2, 1, 3]
>>> sorted_nums = sorted(nums, reverse=True)
>>> print(sorted_nums)
[4, 3, 2, 1]
上面的代码中,reverse=True表示降序排列。
五、注意事项
1. sorted()函数返回的是一个新的列表,原来的列表并没有被修改。
2. key函数应该返回一个可以比较的值,否则会报TypeError错误。
3. 如果需要排序的对象是一个字典,应该使用字典的items()方法或keys()方法转换为列表后再进行排序。
4. 如果需要将列表倒序排列,应该使用reverse参数,而不是对列表进行逆序操作。
总之,Python中的sorted()函数是一个非常强大、灵活和易用的排序工具,掌握它的用法和技巧可以大大提高代码的效率和可读性。
