Python列表排序

使用Python时,对数据进行排序是最常见的任务之一。 例如,您可能想按名称对团队成员列表进行排序,或按优先级对项目列表进行排序。

本文介绍如何在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)

可选关键字参数 keyreverse 具有以下含义:

  • 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']

您也可以创建自定义函数并将其用作 key 比较的论点。 这是显示如何根据整数之和对整数列表进行排序的示例:


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函数返回 name 键,用于比较:

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 函数获取键的值 symbol

Sorted list: [
    {'name': 'Silver', 'number': 47, 'symbol': 'ag'},
    {'name': 'Iron', 'number': 26, 'symbol': 'fe'},
    {'name': 'Germanium', 'number': 25, 'symbol': 'ge'}
]

结论#

我们已向您展示了如何使用Python对列表进行排序 sort() 方法和 sorted() 功能。

如果您有任何疑问或反馈,请随时发表评论。

蟒蛇

Sidebar