云网牛站
所在位置:首页 > Linux编程 > 讲解Python列表排序:sort()和sorted()、按功能排序

讲解Python列表排序:sort()和sorted()、按功能排序

2020-06-04 10:00:58作者:李建根稿源:云网牛站

本文介绍如何在Python中对列表进行排序。使用Python时,对数据进行排序是最常见的任务之一,例如,您可能想按名称对团队成员列表进行排序,或按优先级对项目列表进行排序,以下就讲解这方面的内容。安装Python参考:在Deepin系统中采用源码安装Python 3.9版本的方法

讲解Python列表排序:sort()和sorted()、按功能排序

 

Python sort()和sorted()

在Python中,您可以使用内置的list.sort()方法或内置的sorted()函数对列表进行排序。

sorted()函数创建一个新的排序列表,而list.sort()方法对列表进行适当排序。如果要保留,则未排序列表使用sorted()函数,另一个区别是sorted()函数可用于任何可迭代对象。

sort()和sorted()的语法如下:

list.sort(key=function, reverse=Boolean)

sorted(iterable, key=function, reverse=Boolean)

可选关键字参数key和reverse具有以下含义:

key-在比较之前接受一个参数并将其转换的函数,该函数必须返回一个用于排序比较的值。

reverse-反向的值可以为True或False,默认值是true,当此参数设置为false时,列表以相反的顺序排序。

使用“小于”(<)运算符比较列表中的元素,并按升序排序。<运算符不支持将字符串与整数进行比较,因此,如果您的列表包含字符串和整数,则排序操作将失败。

以下示例显示如何按字母顺序对字符串列表进行排序:

directions = ["north", "east", "south", "west"] 

directions.sort()

print('Sorted list:', directions)

返回:

Sorted list: ['east', 'north', 'south', 'west']

如果要保持原始列表不变,请使用sorted()函数:

directions = ["north", "east", "south", "west"] 

sorted_directions = sorted(directions)

print('Sorted list:', sorted_directions)

返回:

Sorted list: ['east', 'north', 'south', 'west']

要以相反的顺序(降序)对列表进行排序,请将reverse参数设置为True:

directions = ["north", "east", "south", "west"] 

directions.sort(reverse=True)

print('Sorted list:', directions)

返回:

Sorted list: ['west', 'south', 'north', 'east']

 

按功能排序

key参数接受一个函数,并允许您执行更复杂的排序操作。

最简单的示例是根据元素的长度对其进行排序:

directions = ["Arya", "Daenerys", "Jon", "Brienne"]

directions.sort(key=len)

print('Sorted list:', directions)

我们使用len()函数返回字符串中的字符数,该字符串用作比较器:

Sorted list: ['Jon', 'Arya', 'Brienne', 'Daenerys']

您还可以创建一个自定义函数并将其用作比较的关键参数,这是显示如何根据整数之和对整数列表进行排序的示例:

def sum_digits(num):

  digits = [int(x) for x in str(num)]

  return sum(digits)    

numbers = [23, 77, 19, 310, 219]

numbers.sort(reverse=True, key=sum_digits)

print('Sorted list:', numbers)

返回:

Sorted list: [77, 219, 19, 23, 310]

另一个示例是使用key参数对复杂列表进行排序,例如元组列表:

numbers = [(3, 14), (1, 61), (2, 71)]

numbers.sort(key=lambda k: k[0])

print('Sorted list:', numbers)

我们正在使用一个匿名(lambda)函数,该函数返回元组的第一个元素,该列表按功能返回的值排序:

Sorted list: [(1, 61), (2, 71), (3, 14)]

可以使用相同的方法对词典列表进行排序:

elements = [

  {'name': 'Germanium', 'number': 25, 'symbol': 'ge'},

  {'name': 'Silver', 'number': 47, 'symbol': 'ag'},

  {'name': 'Iron', 'number': 26, 'symbol': 'fe'},

]

elements.sort(key=lambda k: k['name'])

print('Sorted list:', elements)

lambda函数返回名称键的值,该值用于比较:

Sorted list: [

  {'name': 'Germanium', 'number': 25, 'symbol': 'ge'},

  {'name': 'Iron', 'number': 26, 'symbol': 'fe'},

  {'name': 'Silver', 'number': 47, 'symbol': 'ag'}

]

排序复杂功能的更好,更快的方法是使用操作员模块功能,这是一个例子:

from operator import itemgetter

elements = [

  {'name': 'Germanium', 'number': 25, 'symbol': 'ge'},

  {'name': 'Silver', 'number': 47, 'symbol': 'ag'},

  {'name': 'Iron', 'number': 26, 'symbol': 'fe'},

]

elements.sort(key=itemgetter('symbol'))

print('Sorted list:', elements)

itemgetter函数获取键符号的值:

Sorted list: [

  {'name': 'Silver', 'number': 47, 'symbol': 'ag'},

  {'name': 'Iron', 'number': 26, 'symbol': 'fe'},

  {'name': 'Germanium', 'number': 25, 'symbol': 'ge'}

]

 

结论

我们已经向您展示了如何使用sort()方法和sorted()函数在Python中对列表进行排序,加以实践下就可以很好的理解了。

 

相关主题

Python字符串替换:.replace()方法、替换字符串列表中的子字符串

精选文章
热门文章