如何在 Python 中对列表进行排序

已发表: 2022-03-30

本文将教你如何在 Python 中对列表进行排序。

在 Python 中,您可以使用sort()方法对列表进行就地排序。 或者您可以使用内置的sorted()函数来获取列表的排序副本。

在本教程中,您将学习:

  • sort()方法和sorted()函数的语法
  • 列表升序和降序排序的代码示例
  • 使用key参数自定义排序
  • sort()sorted()之间的区别

开始吧!

Python sort() 方法的语法

sort()方法作用于 Python 列表。 它会对列表进行适当的排序,并修改原始列表。

Python 的sort()方法的语法是:

 <list>.sort(reverse = True | False, key = <func>)

现在让我们解析上面的语法。

  • <list>是任何有效的 Python 列表对象。
  • reverse是一个可选参数,它采用 True 或 False。
  • reverse的默认值为False ,列表按升序排序。 给True以按降序对列表进行排序。
  • key也是一个可选参数,设置为<func>
  • <func>可以是内置函数,也可以是用户自定义函数。

在下一节中,您将开始编写简单的示例。

如何按升序对 Python 列表进行排序

考虑列表nums 。 要按升序对列表进行排序,可以调用列表的sort()方法。

运行以下代码片段。

 nums = [25,13,6,17,9] nums.sort() print(nums) # Output: [6, 9, 13, 17, 25]

列表nums进行了升序排序,修改了原始列表。 这称为就地排序

如何按降序对 Python 列表进行排序

要按降序对列表进行排序,请将reverse设置为True ,如下所示。

 nums = [25,13,6,17,9] nums.sort(reverse = True) print(nums) # Output: [25, 17, 13, 9, 6]

您可以看到列表现在按降序排序。

如何在 Python sort() 方法中使用 key

在本节中,让我们使用key参数并自定义排序。

这里, mod5()是一个函数,它接受一个数字x ,并在数字x除以 5 时返回余数。

 def mod5(x): return x % 5

我们想用上面的函数作为key

现在,运行以下代码单元。

 nums = [25,13,6,17,9] nums.sort(key = mod5) print(nums) # Output: [25, 6, 17, 13, 9]

花点时间解析输出。

请注意,您现在如何根据mod5 key自定义排序,而不是常规排序。

  • 现在除以 5 时留下最小余数的数字排在第一位。
  • 除以 5 时留下最大余数的数字是排序列表中的最后一个元素。

要验证是否是这种情况,请运行以下代码片段。

 nums = [25,13,6,17,9] for num in nums: print(f"{num} leaves remainder {num%5} when divided by 5") # Output 25 leaves remainder 0 when divided by 5 13 leaves remainder 3 when divided by 5 6 leaves remainder 1 when divided by 5 17 leaves remainder 2 when divided by 5 9 leaves remainder 4 when divided by 5

5 正好除以 25,余数为 0。所以这是排序列表中的第一个元素。 6 留下余数 1,所以它是第二个元素,依此类推。 9 除以 5 后余数为 4,它是排序列表中的最后一个元素。

与其定义单独的函数,不如使用 lambda 函数。 在 Python 中,lambda 是单行匿名函数。 lambda args : expression返回在args上计算的表达式

现在,让我们使用 lambda 表达式重写上述排序,如下所示。

 nums = [25,13,6,17,9] nums.sort(key = lambda x:x%5) print(nums) # Output: [25, 6, 17, 13, 9]

到目前为止,您已经学习了如何对数字列表进行排序。 接下来,让我们看看如何在 Python 中对字符串列表进行排序。

如何按字母顺序对 Python 列表进行排序

在本节中,您将学习对字符串列表进行排序 - 示例受哈利波特启发。

python-排序列表

在我们的示例中, students是霍格沃茨的学生列表。 我们想按照他们名字的字母顺序对他们进行排序。

对字符串列表进行排序时,默认排序是按字母顺序排列的。

 students = ["Harry","Ron","Hermione","Draco","Cedric"]

让我们打印出排序后的列表来验证排序的结果。

 students.sort() print(students) # Output ['Cedric','Draco', 'Harry', 'Hermione', 'Ron']

如何以相反的字母顺序对 Python 列表进行排序

为了按字母倒序对列表进行排序,请设置reverse = True ,如下面的代码片段所示。

 students.sort(reverse = True) print(students) # Output ['Ron', 'Hermione', 'Harry', 'Draco', 'Cedric']

从输出中,您可以看到列表确实已按相反顺序排序。

如何使用关键参数自定义排序

在本节中,让我们使用可选的key参数自定义排序。

考虑以下列表, houses

 houses = [ {1:"Draco","house":"Slytherin"}, {2:"Harry","house":"Gryffindor"}, {3:"Cedric","house":"Hufflepuff"} ]

在这里, houses是一个字典列表。 每个字典包含两个键值对,一个表示学生的姓名,另一个表示他们所属的房子。

现在,我们想按照房屋所属房屋的字母顺序对列表房屋进行排序。

正如您现在可能已经猜到的那样,我们应该将key参数设置为特定学生的房子。

为了检索每个学生的房子,您可以定义一个函数returnHouse() ,如下所示。

 def returnHouse(student): return student['house']

此函数返回特定学生所属的房子。

现在,您可以在房屋列表上调用sort()方法,如图所示。

 houses.sort(key=returnHouse)

在下面的输出中,请注意列表是如何按房子而不是学生姓名排序的。 这就是为什么我们有格兰芬多、赫奇帕奇和斯莱特林的原因——按字母顺序排列。

 print(houses) # Output [{2: 'Harry', 'house': 'Gryffindor'}, {3: 'Cedric', 'house': 'Hufflepuff'}, {1: 'Draco', 'house': 'Slytherin'}]

要相应地定义key参数,您还可以使用 lambda 函数。 对于每个列表项,此函数返回该列表项的房子。

运行以下代码单元来验证这一点。

 houses.sort(key=lambda student:student["house"]) print(houses) # Output [{2: 'Harry', 'house': 'Gryffindor'}, {3: 'Cedric', 'house': 'Hufflepuff'}, {1: 'Draco', 'house': 'Slytherin'}]

在到目前为止的所有示例中,您都在列表上使用了sort()方法。 现在您知道它修改了原始列表。

如果您想保留原始列表但获得列表的排序副本怎么办?

好吧,在 Python 中,您可以使用sorted()函数来执行此操作。

Python sorted() 函数的语法

sorted()函数接受一个列表或任何集合作为参数。 它返回列表的排序副本——原始列表没有被修改。

Python 的sorted()函数的语法是:

 <sorted_copy> = sorted(<list>, reverse = True | False, key = <func>)

请注意语法与我们之前看到的sort()方法非常相似。

  • <list>是任何有效的 Python 列表对象,并且是必需参数。
  • reversekey可选参数

注意:与仅作用于列表的sort()方法不同, sorted()函数可用于对任何 Python 可迭代对象进行排序,例如列表、字符串和字典。

如何使用 sorted() 函数对 Python 列表进行排序

#1。 在此示例中, nums是数字列表。

您可以使用nums作为参数调用sorted()函数。 并将其分配给列表sorted_nums1

 nums = [25,13,6,17,9] sorted_nums1 = sorted(nums) print(sorted_nums1) # Output: [6, 9, 13, 17, 25]

在上面的输出中,您可以看到默认情况下nums已按升序排序。

另外,请注意原始列表nums没有被修改——因为sorted()返回一个新列表。 这在下面得到验证。

 print(nums) # Output: [25, 13, 6, 17, 9]

#2 现在,将可选参数reverse设置为True并获取sorted_nums2

如下面的代码单元格所示, sorted_nums2是一个新列表,其中的项目按降序排序。

 sorted_nums2 = sorted(nums,reverse = True) print(sorted_nums2) # Output: [25, 17, 13, 9, 6]

#3。 在此示例中,让我们使用字符串列表。

与前面的示例一样,调用sorted()函数会返回一个新列表。 并且项目按字母顺序排序。

 fruits = ['pears','strawberry','apple','pineapple','blueberry'] sorted_fr1 = sorted(fruits) print(sorted_fr1) # Output: ['apple', 'blueberry', 'pears', 'pineapple', 'strawberry']

#4。 现在,让我们使用可选的key参数自定义排序。 将key设置为len 。 这将根据字符串的长度对列表进行排序。

注意:在 Python 中,内置的len()函数接受任何可迭代对象,例如列表、字符串、元组等。 它返回可迭代的长度。

长度最短的字符串出现在排序列表的最前面,最长的字符串出现在排序列表的末尾。

 fruits = ['pear','strawberry','apple','pineapple','blueberry'] sorted_fr2 = sorted(fruits,key=len) print(sorted_fr2) # Output: ['pear', 'apple', 'pineapple', 'blueberry', 'strawberry']

在上面的输出中,是最短的字符串,草莓是最长的字符串。

Python sort() 方法与 sorted() 函数

到目前为止,您已经学习了如何使用sort()方法以及sorted()函数。 在本节中,让我们列举这两种方法之间的区别。

Python .sort() 方法Python sorted() 函数
对列表进行就地排序——修改原始列表返回一个新的排序列表
仅适用于 Python 列表适用于 Python 可迭代对象,例如列表、字符串和其他集合
返回类型为None 返回可迭代的排序副本

加起来

我希望这个 Python 列表教程对您有所帮助。

让我们快速总结一下我们所涵盖的内容。

  • 使用list.sort(reverse = True | False, key = <func>)和可选的reversekey参数对列表进行就地排序。
  • 使用sorted(list, reverse = True | False, key = <func>)获取列表的排序副本。

现在您已经学习了如何对 Python 列表进行排序,接下来了解 Python 中的列表推导。 或者您也可以学习如何在 Python 中处理文件或使用 JSON 文件。

您可以在 Geekflare Online Python 编译器中尝试上面给出的示例。