如何在 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 列表进行排序
在本节中,您将学习对字符串列表进行排序 - 示例受哈利波特启发。
在我们的示例中, 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 列表对象,并且是必需参数。 -
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
参数自定义排序。 将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>)和可选的reverse和key参数对列表进行就地排序。
- 使用sorted(list, reverse = True | False, key = <func>)获取列表的排序副本。
现在您已经学习了如何对 Python 列表进行排序,接下来了解 Python 中的列表推导。 或者您也可以学习如何在 Python 中处理文件或使用 JSON 文件。
您可以在 Geekflare Online Python 编译器中尝试上面给出的示例。