原文: Python List Sorting – How to Order Lists in Python
在很多情况下,你可能希望在 Python 应用程序中对列表进行排序。
在本文中,我将向你展示如何根据你的需要对列表进行升序和降序排序。
Python 中的列表是什么
列表是 Python 中的一种数据类型,你可以在其中存储不同数据类型的多个值(包括嵌套列表)。
以下是列表示例:
numList = [1, 2, 3, 4, 5]
stringList = ["banana", "orange", "apple"]
mixedList = [1, "banana", "orange", [5, 6]]
你可以使用它们的索引位置访问列表中的项目。列表中的索引位置从 0 开始:
stringList = ["banana", "orange", "apple"]
print(stringList[1])
# "orange"
如何在 Python 中对列表进行排序
你可以使用 sort()
方法在 Python 中对列表进行排序。
sort()
方法允许你对列表中的项目进行排序,语法如下:
list.sort(reverse=True|False, key=sortFunction)
该方法接受两个可选参数:
reverse
:如果为True
,则以相反的顺序(降序)对列表进行排序,如果为False
(默认情况下),则以常规顺序(升序)对列表进行排序key
:你提供的描述排序方法的函数
默认情况下,你可以按升序对字符串和数字进行排序,而无需将参数传递给此方法:
items = ["orange", "cashew", "banana"]
items.sort()
# ['banana', 'cashew', 'orange']
在上面,你可以看到排序列表首先有 b(在 banana 中),然后是 c(在 cashew 中),因为它在 b 之后,最后是 o(在 orange 中),按字母顺序排在后面。
请注意,此方法会修改原始数组。
对于降序,你可以传递 reverse
参数:
items = [6, 8, 10, 5, 7, 2]
items.sort(reverse=True)
# [10, 8, 7, 6, 5, 2]
通过将 True
传递给 reverse
参数,你会看到项目列表中的数字是反向排序的,即降序。
如何指定排序函数
如果你在字典列表中尝试此操作会怎样?让我们来看看:
items = [{
'name': 'John',
'age': 40
}, {
'name': 'Mike',
'age': 45
}, {
'name': 'Jane',
'age': 33
}, {
'name': 'Asa',
'age': 42
}]
items.sort()
你会得到一个报错,因为字典是不可排序的。你可以在此处使用 key
参数指定排序条件:
items = [
{
'name': 'John',
'age': 40
},
{
'name': 'Mike',
'age': 45
},
{
'name': 'Jane',
'age': 33
},
{
'name': 'Asa',
'age': 42
}
]
def sortFn(dict):
return dict['age']
items.sort(key=sortFn)
# [
# {'name': 'Jane', 'age': 33},
# {'name': 'John', 'age': 40},
# {'name': 'Asa', 'age': 42},
# {'name': 'Mike', 'age': 45}
# ]
正如你将在上面的代码块中注意到的那样,使用排序函数,我们已指定排序决定应基于每个字典中的 age
键。
如果在此处将 reverse
参数作为 True
传递,则排序的字典将按降序排列。
这是另一个使用排序函数的示例:
items = ["cow", "elephant", "duck"]
def sortFn(value):
return len(value)
items.sort(key=sortFn, reverse=True)
# ['elephant', 'duck', 'cow']
在这种情况下,排序函数返回列表中值的长度作为排序过程的标准。通过将 reverse
设置为 True
,你可以看到排序列表首先具有较长的字符串,然后是较短的字符串。
总结
在构建应用程序时,列表排序的场景有很多,可能是根据 last_opened
键对文件列表进行排序,也可能是根据 price
键对产品进行分类。如你所见,你可以在实际应用程序中使用许多标准。
在本文中,我们了解了如何使用不同的方法在 Python 中按升序和降序对列表进行排序。