如何在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列表对象,是一个必需参数。
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)
# 输出:[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 |
返回可迭代对象的排序副本 |
总结 👩🏫
希望您觉得本教程有用。
让我们快速总结一下我们所学到的内容。
- 使用可选的
reverse
和key
参数,使用list.sort(reverse = True | False, key = )在原地对列表进行排序。 - 使用sorted(list, reverse = True | False, key = ) 获取已排序的列表副本。
现在您已经学会了如何对Python列表进行排序,请了解有关list comprehension in Python的信息。或者您也可以学习在Python中的how to handle files或work with JSON files。
您可以在Geekflare Online Python Compiler中尝试上述给出的示例。