• python sorted 自带函数模块 排序方法使用


    sorted()函数按特定顺序(升序或降序)对给定迭代的元素进行排序,并将其作为列表返回。

    例子

    numbers = [4, 2, 12, 8]
    sorted_numbers = sorted(numbers)
    1. print(sorted_numbers)
    2. # Output: [2, 4, 8, 12]

    sorted() 的语法

    sorted()函数的语法是:

    排序(可迭代,键=无,反向=假)

    sorted() 参数

    sorted()最多可以取三个参数:

    • 可迭代- 序列(字符串元组列表)或集合(集合字典冻结集)或任何其他迭代器。
    • reverse (可选) - 如果True,则排序列表被反转(或按降序排序)。False如果未提供,则默认为。
    • key (可选) - 用作排序比较键的函数。默认为None.

    排序()返回值

    sorted()函数返回一个排序列表。


    示例 1:对字符串、列表和元组进行排序

    1. # vowels list
    2. py_list = ['e', 'a', 'u', 'o', 'i']
    print(sorted(py_list))
    1. # string
    2. py_string = 'Python'
    print(sorted(py_string))
    1. # vowels tuple
    2. py_tuple = ('e', 'a', 'u', 'o', 'i')
    print(sorted(py_tuple))

    输出

    1. ['a', 'e', 'i', 'o', 'u']
    2. ['P''h''n''o''t''y']
    3. ['a', 'e', 'i', 'o', 'u']

    请注意,在所有情况下都会返回排序列表。

    注意:列表也有sort()方法,其执行方式与sorted(). 唯一的区别是该sort()方法不返回任何值并更改原始列表。


    示例 2:按降序排序

    sorted()函数接受一个reverse参数作为可选参数。

    设置reverse = True按降序对迭代进行排序。

    1. # set
    2. py_set = {'e', 'a', 'u', 'o', 'i'}
    print(sorted(py_set, reverse= True))
    1. # dictionary
    2. py_dict = {'e': 1, 'a': 2, 'u': 3, 'o': 4, 'i': 5}
    print(sorted(py_dict, reverse= True))
    1. # frozen set
    2. frozen_set = frozenset(('e', 'a', 'u', 'o', 'i'))
    3. print(sorted(frozen_set, reverse=True))

    输出

    1. ['u', 'o', 'i', 'e', 'a']
    2. ['u', 'o', 'i', 'e', 'a']
    3. ['u', 'o', 'i', 'e', 'a']

    Python sorted() 函数中的关键参数

    如果您想要自己的排序实现,sorted()也接受一个key函数作为可选参数。

    根据 key 函数的返回值,可以对给定的 iterable 进行排序。

    排序(可迭代,键=len)

    在这里,len()是 Python 的内置函数来计算对象的长度。

    Ad

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


    示例 3:使用具有键功能的 sorted() 对列表进行排序

    1. # take the second element for sort
    2. def take_second(elem):
    3. return elem[1]
    4. # random list
    5. random = [(2, 2), (3, 4), (4, 1), (1, 3)]
    6. # sort list with key
    sorted_list = sorted(random, key=take_second)
    1. # print list
    2. print('Sorted list:', sorted_list)

    输出

    排序列表:[(4, 1), (2, 2), (1, 3), (3, 4)]
    

    示例 4:使用多个键进行排序

    让我们假设我们有以下列表:

    1. # Nested list of student's info in a Science Olympiad
    2. # List elements: (Student's Name, Marks out of 100, Age)
    3. participant_list = [
    4. ('Alison', 50, 18),
    5. ('Terence', 75, 12),
    6. ('David', 75, 20),
    7. ('Jimmy', 90, 22),
    8. ('John', 45, 12)
    9. ]

    我们希望以这样一种方式对列表进行排序,使得分最高的学生排在最前面。如果学生的分数相同,则必须对他们进行排序,以便年轻的参与者排在第一位。

    我们可以通过返回元组而不是数字来实现这种多键排序。

    可以通过从第一个开始比较它们的元素来比较两个元组。如果存在平局(元素相等),则比较第二个元素,依此类推。

    1. >>> (1,3) > (1, 4)
    2. False
    3. >>> (1, 4) < (2,2)
    4. True
    5. >>> (1, 4, 1) < (2, 1)
    6. True

    让我们使用这个逻辑来构建我们的排序逻辑。

    1. # Nested list of student's info in a Science Olympiad
    2. # List elements: (Student's Name, Marks out of 100 , Age)
    3. participant_list = [
    4. ('Alison', 50, 18),
    5. ('Terence', 75, 12),
    6. ('David', 75, 20),
    7. ('Jimmy', 90, 22),
    8. ('John', 45, 12)
    9. ]
    10. def sorter(item):
    11. # Since highest marks first, least error = most marks
    12. error = 100 - item[1]
    13. age = item[2]
    14. 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以下方式使用该函数编写:

    1. # Nested list of student's info in a Science Olympiad
    2. # List elements: (Student's Name, Marks out of 100 , Age)
    3. participant_list = [
    4. ('Alison', 50, 18),
    5. ('Terence', 75, 12),
    6. ('David', 75, 20),
    7. ('Jimmy', 90, 22),
    8. ('John', 45, 12)
    9. ]
    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 函数

  • 相关阅读:
    许战海战略文库|2023,小鹏危矣!蔚小理之江湖点评
    八月份跳槽了,历经华为测开岗4轮面试,不出意外,被刷了...
    【完全二叉树魔法:顺序结构实现堆的奇象】
    Electron[1] 缘起桌面应用
    neo4j迁移数据从4.4版本到5.17版本
    Spring Bean的作用域有哪些?它的注册方式有几种?
    3.Python-用Python实现MySQL数据库的增删改查
    十种排序方法
    【沐风老师】3DMAX路径拖尾光线刀光效果插件GhostTrails教程
    Python 笔记03(多线程)
  • 原文地址:https://blog.csdn.net/PresleyR/article/details/125622455