在Python中,列表是一种非常常见的数据类型,它可以存储任意类型的数据,包括数字、字符串、布尔值、甚至其他列表等等。而列表排序则是对列表中的数据进行重新排列,使其按照一定的顺序排列,这在数据处理中非常重要。Python提供了很多对列表排序的函数,本文将从多个角度对这些函数进行分析。
sort()函数是Python中最常用的列表排序函数之一,它可以对列表进行升序或降序排序。
sort()函数的使用方法如下:
list.sort(reverse=True/False)
其中,reverse参数用于指定排序的方式,True表示降序排序,False表示升序排序。例如,如果我们有一个列表需要升序排序,可以使用以下代码:
list = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
list.sort()
print(list)
运行结果为:
[1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]
如果需要降序排序,则可以将reverse参数设置为True:
list = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
list.sort(reverse=True)
print(list)
运行结果为:
[9, 6, 5, 5, 5, 4, 3, 3, 2, 1, 1]
注:sort()函数的优点是速度快,但缺点是会改变原始列表的顺序。
sorted()函数也可以对列表进行排序,但它不会改变原始列表的顺序,而是返回一个新的排序后的列表。sorted()函数的使用方法如下:
sorted(list, reverse=True/False)
其中,list是需要排序的列表,reverse参数同样用于指定排序的方式。例如,如果我们需要对一个列表进行降序排序,可以使用以下代码:
list = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
sorted_list = sorted(list, reverse=True)
print(sorted_list)
运行结果为:
[9, 6, 5, 5, 5, 4, 3, 3, 2, 1, 1]
sorted()函数的优点是不会改变原始列表的顺序,缺点是速度相对较慢。
在对列表进行排序时,我们有时需要根据列表中的某个元素进行排序,这时我们可以使用lambda函数进行排序。lambda函数是一种匿名函数,可以在不定义函数的情况下使用它。例如,如果我们有一个列表需要根据其中的元素进行排序,可以使用以下代码:
list = [(1, 2), (3, 1), (5, 3), (2, 4), (6, 5)]
sorted_list = sorted(list, key=lambda x: x[0])
print(sorted_list)
运行结果为:
[(1, 2), (2, 4), (3, 1), (5, 3), (6, 5)]
这里使用的lambda函数表示按照元组中的第一个元素进行排序。再如:
s = [3,2,90,7,6,1] s_sorted = sorted(s,key=lambda x:x) print(s_sorted)
运行结果为[1, 2, 3, 6, 7, 90]。
itemgetter函数也可以根据列表中的某个元素进行排序,它比lambda函数更快。itemgetter函数需要导入operator模块,使用方法如下:
from operator import itemgetter
list = [(1, 2), (3, 1), (5, 3), (2, 4), (6, 5)]
sorted_list = sorted(list, key=itemgetter(0))
print(sorted_list)
运行结果与lambda函数相同。再如:
s = [3,2,90,7,6,1] from operator import itemgetter s_sort = sorted(s,key=itemgetter(0)) print(s_sort)
输出为[1, 2, 3, 6, 7, 90]。
在对列表进行排序时,我们有时需要根据多个条件进行排序,这时就可以使用reverse参数和key参数结合使用。例如,如果我们有一个列表需要先按照元素的第一个元素进行降序排序,再按照第二个元素进行升序排序,可以使用以下代码:
list = [(1, 2), (3, 1), (5, 3), (2, 4), (6, 5)]
sorted_list = sorted(list, key=lambda x: (-x[0], x[1]))
print(sorted_list)
运行结果为:
[(6, 5), (5, 3), (3, 1), (2, 4), (1, 2)]
这里使用了lambda函数,将第一个元素取负数表示降序排序,第二个元素不取负数表示升序排序。
参考文章:python对列表排序的函数 - 优草派