该sorted()
函数按特定顺序(升序或降序)对给定迭代的元素进行排序,并将其作为列表返回。
例子
numbers = [4, 2, 12, 8]
sorted_numbers = sorted(numbers)
- print(sorted_numbers)
-
- # Output: [2, 4, 8, 12]
sorted() 的语法
该sorted()
函数的语法是:
sorted() 参数
sorted()
最多可以取三个参数:
- 可迭代- 序列(字符串、元组、列表)或集合(集合、字典、冻结集)或任何其他迭代器。
- reverse (可选) - 如果
True
,则排序列表被反转(或按降序排序)。False
如果未提供,则默认为。 - key (可选) - 用作排序比较键的函数。默认为
None
.
排序()返回值
该sorted()
函数返回一个排序列表。
示例 1:对字符串、列表和元组进行排序
- # vowels list
- py_list = ['e', 'a', 'u', 'o', 'i']
print(sorted(py_list))
- # string
- py_string = 'Python'
print(sorted(py_string))
- # vowels tuple
- py_tuple = ('e', 'a', 'u', 'o', 'i')
print(sorted(py_tuple))
输出
- ['a', 'e', 'i', 'o', 'u']
- ['P','h','n','o','t','y']
- ['a', 'e', 'i', 'o', 'u']
请注意,在所有情况下都会返回排序列表。
注意:列表也有sort()方法,其执行方式与sorted()
. 唯一的区别是该sort()
方法不返回任何值并更改原始列表。
示例 2:按降序排序
该sorted()
函数接受一个reverse
参数作为可选参数。
设置reverse = True
按降序对迭代进行排序。
- # set
- py_set = {'e', 'a', 'u', 'o', 'i'}
print(sorted(py_set, reverse=
True))
- # dictionary
- py_dict = {'e': 1, 'a': 2, 'u': 3, 'o': 4, 'i': 5}
print(sorted(py_dict, reverse=
True))
- # frozen set
- frozen_set = frozenset(('e', 'a', 'u', 'o', 'i'))
- print(sorted(frozen_set, reverse=True))
输出
- ['u', 'o', 'i', 'e', 'a']
- ['u', 'o', 'i', 'e', 'a']
- ['u', 'o', 'i', 'e', 'a']
Python sorted() 函数中的关键参数
如果您想要自己的排序实现,sorted()
也接受一个key
函数作为可选参数。
根据 key 函数的返回值,可以对给定的 iterable 进行排序。
排序(可迭代,键=len)在这里,len()
是 Python 的内置函数来计算对象的长度。
Ad
该列表根据元素的长度进行排序,从最低计数到最高计数。
示例 3:使用具有键功能的 sorted() 对列表进行排序
- # take the second element for sort
- def take_second(elem):
- return elem[1]
-
-
- # random list
- random = [(2, 2), (3, 4), (4, 1), (1, 3)]
-
- # sort list with key
sorted_list = sorted(random, key=take_second)
- # print list
- print('Sorted list:', sorted_list)
输出
排序列表:[(4, 1), (2, 2), (1, 3), (3, 4)]
示例 4:使用多个键进行排序
让我们假设我们有以下列表:
- # Nested list of student's info in a Science Olympiad
- # List elements: (Student's Name, Marks out of 100, Age)
-
- participant_list = [
- ('Alison', 50, 18),
- ('Terence', 75, 12),
- ('David', 75, 20),
- ('Jimmy', 90, 22),
- ('John', 45, 12)
- ]
我们希望以这样一种方式对列表进行排序,使得分最高的学生排在最前面。如果学生的分数相同,则必须对他们进行排序,以便年轻的参与者排在第一位。
我们可以通过返回元组而不是数字来实现这种多键排序。
可以通过从第一个开始比较它们的元素来比较两个元组。如果存在平局(元素相等),则比较第二个元素,依此类推。
- >>> (1,3) > (1, 4)
- False
- >>> (1, 4) < (2,2)
- True
- >>> (1, 4, 1) < (2, 1)
- True
让我们使用这个逻辑来构建我们的排序逻辑。
- # Nested list of student's info in a Science Olympiad
- # List elements: (Student's Name, Marks out of 100 , Age)
- participant_list = [
- ('Alison', 50, 18),
- ('Terence', 75, 12),
- ('David', 75, 20),
- ('Jimmy', 90, 22),
- ('John', 45, 12)
- ]
-
-
- def sorter(item):
- # Since highest marks first, least error = most marks
- error = 100 - item[1]
- age = item[2]
- return (error, age)
sorted_list = sorted(participant_list, key=sorter)
print(sorted_list)
输出
[('Jimmy', 90, 22), ('Terence', 75, 12), ('David', 75, 20), ('Alison', 50, 18), ('John', 45, 12) ]
由于排序逻辑函数很小且适合一行,lambda
因此在内部使用函数key
而不是传递单独的函数名称。
上面的程序可以通过lambda
以下方式使用该函数编写:
- # Nested list of student's info in a Science Olympiad
- # List elements: (Student's Name, Marks out of 100 , Age)
- participant_list = [
- ('Alison', 50, 18),
- ('Terence', 75, 12),
- ('David', 75, 20),
- ('Jimmy', 90, 22),
- ('John', 45, 12)
- ]
sorted_list = sorted(participant_list, key=
lambda item: (
100-item[
1], item[
2]))
print(sorted_list)
输出
[('Jimmy', 90, 22), ('Terence', 75, 12), ('David', 75, 20), ('Alison', 50, 18), ('John', 45, 12) ]
要了解有关 lambda 函数的更多信息,请访问Python Lambda 函数。