📜  Python列表list sort()

📅  最后修改于: 2020-09-20 13:34:14             🧑  作者: Mango

sort()方法以特定的升序或降序对给定列表的元素进行排序。

sort()方法的语法为:

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

另外,您也可以出于相同的目的使用Python的内置sorted() 函数 。

sorted(list, key=..., reverse=...)

注意: sort()sorted()之间最简单的区别是: sort()直接更改列表且不返回任何值,而sorted()则不更改列表并返回已排序的列表。

sort()参数

默认情况下, sort()不需要任何额外的参数。但是,它有两个可选参数:

  1. reverse-如果为True ,则将排序列表反转(或以降序排序)
  2. key-用作排序比较的键的函数

从sort()返回值

sort()方法不返回任何值。而是,它更改了原始列表。

如果您希望函数返回排序后的列表而不是更改原始列表,请使用sorted()

示例1:对给定列表进行排序

# vowels list
vowels = ['e', 'a', 'u', 'o', 'i']

# sort the vowels
vowels.sort()

# print vowels
print('Sorted list:', vowels)

输出

Sorted list: ['a', 'e', 'i', 'o', 'u']

降序排列

sort()方法接受reverse参数作为可选参数。

设置reverse = True将列表按降序排列。

list.sort(reverse=True)

或者,对于sorted() ,您可以使用以下代码。

sorted(list, reverse=True)

示例2:以降序对列表进行排序

# vowels list
vowels = ['e', 'a', 'u', 'o', 'i']

# sort the vowels
vowels.sort(reverse=True)

# print vowels
print('Sorted list (in Descending):', vowels)

输出

Sorted list (in Descending): ['u', 'o', 'i', 'e', 'a']

使用键对自定义函数进行排序

如果您想要自己的实现进行排序,则sort()方法还接受key 函数作为可选参数。

根据键函数的结果,可以对给定列表进行排序。

list.sort(key=len)

也可以排序:

sorted(list, key=len)

在这里, len是Python的内置函数,用于计算元素的长度。

该列表根据每个元素的长度(从最低计数到最高计数)进行排序。

我们知道默认情况下,元组使用其第一个参数进行排序。让我们看看如何自定义sort()方法以使用第二个元素进行排序。

示例3:使用键对列表进行排序

# take second element for sort
def takeSecond(elem):
    return elem[1]

# random list
random = [(2, 2), (3, 4), (4, 1), (1, 3)]

# sort list with key
random.sort(key=takeSecond)

# print list
print('Sorted list:', random)

输出

Sorted list: [(4, 1), (2, 2), (1, 3), (3, 4)]

让我们再举一个例子。假设我们有一个关于办公室员工的信息列表,其中每个元素都是一个字典。

我们可以通过以下方式对列表进行排序:

# sorting using custom key
employees = [
    {'Name': 'Alan Turing', 'age': 25, 'salary': 10000},
    {'Name': 'Sharon Lin', 'age': 30, 'salary': 8000},
    {'Name': 'John Hopkins', 'age': 18, 'salary': 1000},
    {'Name': 'Mikhail Tal', 'age': 40, 'salary': 15000},
]

# custom functions to get employee info
def get_name(employee):
    return employee.get('Name')


def get_age(employee):
    return employee.get('age')


def get_salary(employee):
    return employee.get('salary')


# sort by name (Ascending order)
employees.sort(key=get_name)
print(employees, end='\n\n')

# sort by Age (Ascending order)
employees.sort(key=get_age)
print(employees, end='\n\n')

# sort by salary (Descending order)
employees.sort(key=get_salary, reverse=True)
print(employees, end='\n\n')

输出

[{'Name': 'Alan Turing', 'age': 25, 'salary': 10000}, {'Name': 'John Hopkins', 'age': 18, 'salary': 1000}, {'Name': 'Mikhail Tal', 'age': 40, 'salary': 15000}, {'Name': 'Sharon Lin', 'age': 30, 'salary': 8000}]

[{'Name': 'John Hopkins', 'age': 18, 'salary': 1000}, {'Name': 'Alan Turing', 'age': 25, 'salary': 10000}, {'Name': 'Sharon Lin', 'age': 30, 'salary': 8000}, {'Name': 'Mikhail Tal', 'age': 40, 'salary': 15000}]

[{'Name': 'Mikhail Tal', 'age': 40, 'salary': 15000}, {'Name': 'Alan Turing', 'age': 25, 'salary': 10000}, {'Name': 'Sharon Lin', 'age': 30, 'salary': 8000}, {'Name': 'John Hopkins', 'age': 18, 'salary': 1000}]

在这里,对于第一种情况,我们的自定义函数返回每个员工的姓名。由于名称是string ,默认情况下, Python使用字母顺序对其进行排序。

对于第二种情况,返回age( int )并以升序排序。

对于第三种情况,该函数返回薪水( int ),并使用reverse = True降序排列。

它是使用lambda 函数时, 函数可以在一行来概括一个很好的做法。因此,我们也可以将上述程序编写为:

# sorting using custom key
employees = [
    {'Name': 'Alan Turing', 'age': 25, 'salary': 10000},
    {'Name': 'Sharon Lin', 'age': 30, 'salary': 8000},
    {'Name': 'John Hopkins', 'age': 18, 'salary': 1000},
    {'Name': 'Mikhail Tal', 'age': 40, 'salary': 15000},
]

# sort by name (Ascending order)
employees.sort(key=lambda x: x.get('Name'))
print(employees, end='\n\n')

# sort by Age (Ascending order)
employees.sort(key=lambda x: x.get('age'))
print(employees, end='\n\n')

# sort by salary (Descending order)
employees.sort(key=lambda x: x.get('salary'), reverse=True)
print(employees, end='\n\n')

输出

[{'Name': 'Alan Turing', 'age': 25, 'salary': 10000}, {'Name': 'John Hopkins', 'age': 18, 'salary': 1000}, {'Name': 'Mikhail Tal', 'age': 40, 'salary': 15000}, {'Name': 'Sharon Lin', 'age': 30, 'salary': 8000}]

[{'Name': 'John Hopkins', 'age': 18, 'salary': 1000}, {'Name': 'Alan Turing', 'age': 25, 'salary': 10000}, {'Name': 'Sharon Lin', 'age': 30, 'salary': 8000}, {'Name': 'Mikhail Tal', 'age': 40, 'salary': 15000}]

[{'Name': 'Mikhail Tal', 'age': 40, 'salary': 15000}, {'Name': 'Alan Turing', 'age': 25, 'salary': 10000}, {'Name': 'Sharon Lin', 'age': 30, 'salary': 8000}, {'Name': 'John Hopkins', 'age': 18, 'salary': 1000}]

要了解有关lambda函数的更多信息,请访问Python Lambda函数。