python中sort()函数的应用

1.描述

sort() 函数用于对原列表进行排序,如果指定参数,则使用比较函数指定的比较函数。

2.语法

list.sort(cmp=None, key=None, reverse=False)

参数:
cmp – 可选参数, 如果指定了该参数会使用该参数的方法进行排序。
key – 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
reverse – 排序规则,reverse = True 降序, reverse = False 升序(默认)。
返回值:
该函数没有返回值,但会对数组/列表进行排序

3.实例

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<y+x,则x,y的前后位置不变;反之x,y交换位置(y提到x之前)。
        return int("".join(arr))                     
  • 9
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值