如何使用Python的sorted()函数对列表进行排序
Python中有一个非常有用的函数:sorted()。这个函数能够对列表(list)进行排序,使其从小到大(升序)或从大到小(降序)排列。这个函数的使用非常简单,只需按照一定的规则来传入参数就可以了。
语法
sorted()函数的语法格式如下:
(sorted(iterable, cmp=None, key=None, reverse=False))
参数
sorted()函数有四个参数,分别是iterable、cmp、key和reverse,它们的含义分别是:
iterable:必填参数,表示要排序的列表、元组或其他可迭代对象。
cmp:可选参数,是一个比较函数,用于排序的时候定义比较规则。默认为None。
key:可选参数,用于指定一个函数来添加排序的键值。默认为None。
reverse:可选参数,表示是否要将列表进行反转排序。
如果不指定任何参数,sorted()函数默认按照从小到大的顺序进行排序。
示例
下面我们以排列数字的示例来演示一下sorted()函数的使用。假设我们希望对一个列表进行升序排序:
num_list = [9, 4, 6, 1, 3, 7, 2, 8, 5]
sorted_list = sorted(num_list)
print(sorted_list)
输出结果为:
[1, 2, 3, 4, 5, 6, 7, 8, 9]
通过这个例子,我们可以看到sorted()函数能够简单地将输入列表排序输出。
接下来,我们来看看如何使用sorted()函数进行降序排序。只需将reverse参数设置为True即可:
num_list = [9,4,6,1,3,7,2,8,5]
sorted_list = sorted(num_list, reverse=True)
print(sorted_list)
输出结果为:
[9, 8, 7, 6, 5, 4, 3, 2, 1]
可以看出,经过sorted()函数处理后,原先的升序列表变成了降序列表。
现在看看cmp参数的应用。假如我们有这样一个字符串列表:
str_list = ['aaa', 'bb', 'ccc', 'ddddd', 'e']
现在要将这个列表按照字符串长度从小到大进行排序,需要使用到cmp参数来自定义比较规则。
def cmp_len(a, b):
if len(a) < len(b):
return -1
elif len(a) == len(b):
return 0
else:
return 1
sorted_str_list = sorted(str_list, cmp=cmp_len)
print(sorted_str_list)
输出结果为:
['e', 'bb', 'aaa', 'ccc', 'ddddd']
我们在cmp_len()函数中定义比较规则:如果字符串a的长度小于字符串b的长度,则认为a小于b,返回-1,否则返回1,如果a和b长度相等,则返回0。使用sorted()函数时,将cmp参数设置为cmp_len即可实现按照字符串长度从小到大进行排序的效果。可以看到,在排列结果中,字符串元素从短到长依次增加。
最后,我们来介绍一下key参数。假设我们有这样一个人名列表,但列表中人名被","分隔为两部分,我们要按照姓氏进行排序:
name_list = ['Tom, Smith', 'Mary, Knight', 'Jones, David', 'White, Lily', 'Adams, John']
def get_first_name(name):
first_name = name.split(',')[0]
return first_name
sorted_name_list = sorted(name_list, key=get_first_name)
print(sorted_name_list)
输出结果为:
['Adams, John', 'Jones, David', 'Mary, Knight', 'Tom, Smith', 'White, Lily']
我们通过定义get_first_name()函数,从每个元素的','分隔符左侧获取 个字符串(即姓氏),并将其作为sorted()函数的key参数传入,就可以实现按照姓氏排序的需求。
到这里,你已经学会了使用sorted()函数对列表进行排序的方法,包括了正序、倒序、自定义比较函数和关键字排序的情况。这个函数对日常的程序开发非常实用,可以帮助你对大型列表进行快速排序,从而提高代码的运行效率。
