sort() 函数用于对原列表进行排序,如果指定参数,则使用比较函数指定的比较函数。
list.sort(cmp=None, key=None, reverse=False)
参数:
cmp – 可选参数, 如果指定了该参数会使用该参数的方法进行排序。
key – 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
reverse – 排序规则,reverse = True 降序, reverse = False 升序(默认)。
返回值:
该函数没有返回值,但会对数组/列表进行排序
a = [1, 3, 4, 2]
# 1.一般调用
a.sort() # 调用1,无返回值,a=[1, 2, 3, 4]
a.sort(reverse=True) # 逆序, a=[4, 3, 2, 1]
b = sorted(a) # 调用2,有返回值, b=[1, 2, 3, 4]
# 2.通过指定列表中的元素排序输出列表
# 获取列表的第二个元素
def takeSecond(elem):
return elem[1]
# 列表
random = [(2, 2), (3, 4), (4, 1), (1, 3)]
# 指定第二个元素排序
random.sort(key=takeSecond) # 按列表每个元组中第二位元素的升序排序整个数组
# 输出类别
print(random) # [(4, 1), (2, 2), (1, 3), (3, 4)]
3.cmp作为sort()参数使用(python2中使用,python3已弃用)
注: python3中也取消了函数传入机制,可以构造排序函数递给key实现。
>>> cmp(42,32)
1
>>> cmp(99,100)
-1
>>> cmp(10,10)
0
>>> numbers = [5,2,9,7]
>>> numbers.sort()
>>> numbers.sort(cmp) # 通过调用cmp(x,y)来排序,与不传入cmp参数时效果一样(结果相同,但实际执行流程不同)
>>> numbers
[2,5,7,9]
或者自定义函数传入:
numbers = [5, 2, 9, 7]
def reverse_numbers(x, y):
return y - x
numbers.sort(cmp = reverse_numbers) # 逆序,numbers=[9,7,5,2]
# 上述用lambda匿名函数也可以写成:
numbers.sort(lambda x, y: y-x) # numbers=[9,7,5,2]
算法中的应用:
例:把数组排成最小的数。
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
代码:
# -*- coding:utf-8 -*-
class Solution:
def PrintMinNumber(self, numbers):
# write code here
if not len(numbers):
return ""
arr = [str(x) for x in numbers]
arr.sort(lambda x,y:cmp(x+y,y+x)) # 让x和y及y和x拼接后的字符串进行大小比较,若x+y
return int("".join(arr))