欢迎访问宙启技术站
智能推送

如何使用Python的sorted()函数对列表进行排序

发布时间:2023-06-22 08:48:20

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()函数对列表进行排序的方法,包括了正序、倒序、自定义比较函数和关键字排序的情况。这个函数对日常的程序开发非常实用,可以帮助你对大型列表进行快速排序,从而提高代码的运行效率。