Python中的sorted()函数:如何进行排序和自定义键
Python中的sorted()函数是用于对可迭代对象进行排序的内置函数。这个函数返回一个新的列表,这个新列表中的元素是原来可迭代对象的排好序的元素。此函数还有一个可选的参数,用于指定排序时的键。
## 基本用法
sorted()函数基本用法如下:
sorted(iterable, key=None, reverse=False)
其中,iterable表示待排序的可迭代对象,key指定一个函数来用于从每个可迭代元素中提取一个比较键(例:key=str.lower),reverse表示是否需要降序排序。
例如,对一个列表进行升序排序:
lst = [2, 5, 1, 8, 3] lst_sorted = sorted(lst) print(lst_sorted) # [1, 2, 3, 5, 8]
对一个列表进行降序排序:
lst = [2, 5, 1, 8, 3] lst_sorted = sorted(lst, reverse=True) print(lst_sorted) # [8, 5, 3, 2, 1]
## 按指定键排序
有时候,需要在排序时按照某个特定的键来进行排序。例如,如果要按照列表中字符串元素的长度来排序,则可以使用len()函数作为key参数:
lst = ['Apple', 'banana', 'orange', 'pear'] lst_sorted = sorted(lst, key=len) print(lst_sorted) # ['Apple', 'pear', 'banana', 'orange']
这里的key参数为len,表示使用字符串的长度来比较。这个key函数会对每个元素应用一次,用它的返回值进行比较。
## 自定义键
除了使用Python内置函数作为键,还可以使用自定义的函数来作为键。这个自定义的函数可以接受一个参数,表示可迭代对象中的每个元素,返回一个比较键。
例如,有一个列表包含多个人的信息:姓名、年龄和工资。现在要按照这个列表中每个人的工资从高到低进行排序,可先创建一个返回工资的函数,然后将这个函数作为key参数传递给sorted()函数。
def get_salary(person):
return person[2]
persons = [['Tom', 32, 5000], ['Jerry', 28, 4800], ['Mike', 29, 5200], ['Lucy', 30, 4500]]
persons_sorted = sorted(persons, key=get_salary, reverse=True)
print(persons_sorted)
上述代码中,get_salary()函数返回每个person的第3个元素:工资。然后通过将这个函数作为key参数传递给sorted()函数来进行排序。
## 复合排序
除了按照一个键进行排序外,还可以按照多个键进行排序。例如,如果要按照先工资从高到底,再按照年龄从大到小的顺序进行排序,可以按照以下方式定义自定义键函数:
def get_salary(person):
return person[2]
def get_age(person):
return person[1]
persons = [['Tom', 32, 5000], ['Jerry', 28, 4800], ['Mike', 29, 5200], ['Lucy', 30, 4500]]
persons_sorted = sorted(persons, key=lambda x: (-get_salary(x), -get_age(x)))
print(persons_sorted)
这里使用lambda函数创建了一个匿名函数,以便在一个代码行内定义多个键。这个lambda函数使用负数,以便在对多个键进行排序时先对工资降序排列。然后依次对年龄使用降序排列。注意,这里使用了两个负号来保证按照降序排列。
## 总结
sorted()函数是Python中用于排序的一个内置函数。它可以对任何可迭代对象进行排序,并且还有一个key参数,用于指定排序时使用的函数。使用sorted()函数进行排序时,可以根据需要对多个键进行复合排序。
