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

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

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

在本教程中,你将学到:

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

让我们开始吧!👩🏽‍💻

Python sort()方法的语法

sort()方法适用于Python列表。它原地对列表进行排序并修改原列表。

Python sort()方法的语法如下:

.sort(reverse = True | False, key = )

我们来解析一下上述语法。

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

在下一部分,你将开始编写简单的示例。

如何按升序排序Python列表

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

▶ 运行以下代码片段。

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

# 输出:[6, 9, 13, 17, 25]

列表nums已按升序排序,并且原列表已被修改。这称为原地排序

如何按降序排序Python列表

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

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

# 输出:[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)

# 输出:[25, 6, 17, 13, 9]

花一分钟解析输出结果。

注意,现在你根据key(即mod5)自定义了排序。

  • 最小余数除以5的数字现在排在最前面。
  • 最大余数除以5的数字现在是排序后列表的最后一个元素。

为了验证这一点,请运行以下代码片段。

nums = [25,13,6,17,9]

for num in nums:
  print(f"{num}除以5的余数是{num%5}")

# 输出
25除以5的余数是0
13除以5的余数是3
6除以5的余数是1
17除以5的余数是2
9除以5的余数是4

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

你可以使用lambda functions而不是定义一个单独的函数。在Python中,lambda表达式是一行匿名函数。lambda args : expression返回在args上计算的expression

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

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

# 输出:[25, 6, 17, 13, 9]

到目前为止,你已经学会了如何对一个数字列表进行排序。接下来,让我们看看如何对一个字符串列表进行排序。

如何按字母顺序排序Python列表

在本节中,你将学习如何对一个字符串列表进行排序,以下示例以哈利·波特为灵感。

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

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

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

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

students.sort()
print(students)

# 输出
['Cedric','Draco', 'Harry', 'Hermione', 'Ron']

如何按字母顺序相反的顺序排序Python列表

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

students.sort(reverse = True)
print(students)

# 输出
['Ron', 'Hermione', 'Harry', 'Draco', 'Cedric']

从输出中可以看出,列表确实按照相反的顺序进行了排序。

如何使用key参数自定义排序

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

考虑下面的列表houses

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

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

现在,我们想要按照他们所属的学院的字母顺序对这个列表houses进行排序。

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

为了获取每个学生所在的学院,可以定义一个returnHouse()函数,如下所示。

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

这个函数返回特定学生所在的学院。

现在,你可以调用sort()方法对房屋列表进行排序,如下所示。

houses.sort(key=returnHouse)

在下面的输出中,注意列表是按学院而不是学生名字排序的。这就是为什么我们有了Gryffindor、Hufflepuff和Slytherin的字母顺序。

print(houses)

# 输出
[{2: 'Harry', 'house': 'Gryffindor'}, 
{3: 'Cedric', 'house': 'Hufflepuff'}, 
{1: 'Draco', 'house': 'Slytherin'}]

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

▶ 运行以下代码单元格以验证此内容。

houses.sort(key=lambda student:student["house"])
print(houses)

# 输出
[{2: 'Harry', 'house': 'Gryffindor'}, 
{3: 'Cedric', 'house': 'Hufflepuff'}, 
{1: 'Draco', 'house': 'Slytherin'}]

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

那么,如果您想保留原始列表,但获得一个排序后的副本呢?

在Python中,您可以使用sorted()函数来做到这一点。

Python sorted()函数的语法

sorted()函数接受一个列表或任何集合作为参数。它返回一个排序后的列表副本,而不会修改原始列表。

Python sorted()函数的语法如下:

 = sorted(, reverse = True | False, key = )

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

  • 是任何有效的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)

# 输出:[6, 9, 13, 17, 25]

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

另外,请注意原始列表nums未被修改-因为sorted()返回一个新列表。如下所示:

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

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

如下方代码单元格所示,sorted_nums2是一个按降序排序的新列表。

sorted_nums2 = sorted(nums,reverse = True)
print(sorted_nums2)

# 输出:[25, 17, 13, 9, 6]

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

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

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

# 输出:
['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)

# 输出:
['pear', 'apple', 'pineapple', 'blueberry', 'strawberry']

在以上的输出中,pear 是最短的字符串,而strawberry是最长的字符串。

Python sort() 方法 vs. sorted() 函数

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

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

总结 👩‍🏫

希望您觉得本教程有用。

让我们快速总结一下我们所学到的内容。

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

现在您已经学会了如何对Python列表进行排序,请了解有关list comprehension in Python的信息。或者您也可以学习在Python中的how to handle fileswork with JSON files

您可以在Geekflare Online Python Compiler中尝试上述给出的示例。

类似文章