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

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

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

在本教程中,您将学习:

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

让我们开始吧!👩🏽‍💻

Python sort() 方法的语法

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

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

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

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

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

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

如何按升序对 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 

我们想使用上面的函数作为键。

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

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

# Output: [25, 6, 17, 13, 9]

花点时间解析输出。

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

  • 现在除以 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,它是排序列表中的最后一个元素。

与其定义一个单独的函数,不如使用 拉姆达函数. 在 Python 中,lambda 是单行匿名函数。 lambda args : 表达式返回在 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 列表进行排序

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

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

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

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 = [
            {1:"Draco","house":"Slytherin"},
            {2:"Harry","house":"Gryffindor"},
            {3:"Cedric","house":"Hufflepuff"}
         ]

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

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

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

为了检索每个学生的房子,可以定义一个函数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'}]

要相应地定义关键参数,您还可以使用 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() 方法非常相似。

  • 是任何有效的 Python 列表对象,并且是必需参数。
  • reverse 和 key 是可选参数

注意:与仅作用于列表的 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 参数自定义排序。 将密钥设置为 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 = ) 和可选的 reverse 和 key 参数对列表进行就地排序。
  • 使用 sorted(list, reverse = True | False, key = ) 获取列表的排序副本。

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

您可以在 techblik.com 在线 Python 编译器中尝试上面给出的示例。

  哪些 Wi-Fi 安全摄像机可让您在本地录制?