python min函数时间复杂度_作为Python程序员,你真的会用max()和min()函数吗?

在Python的七十多个内置函数中,max()和min()是比较常用的两个,用来查找一组数据中的最大值和最小值。这两个函数看似简单,实则暗藏了很多意想不到的功能,尤其是key参数,更为这两个函数增加了类似map()函数的功能。如果应用在代码中,必定产生鬼斧神工、匪夷所思的感觉,令人叹为观止!

1. 典型应用场景

这是max()和min()函数最常见的应用场景:从多个数值型参数中返回最大/最小值,或者返回数值型列表中的最大/最小值。这里说的数值型,是指整型和浮点型。

>>> max(1,3,5,7) # 返回多个数值型参数中的最大值

7

>>> min([2,4,6,8]) # 返回数值型列表中的最小值

2

2. 比较字符串

输入参数或列表元素的类型,除了数值型,还可以是字符串,但不能数值型和字符串型的混合。两个字符串比较大小的规则是从首字符开始比较其字符的ASCII码值,若相等,则比较后一位字符,直至分出大小。

>>> max(['a','b','c']) # 返回列表中最大的字符串

'c'

>>> min('2020-06-23 12:00:00', '2020-06-23 11:50:00') # 返回最早的日期时间字符串

'2020-06-23 11:50:00'

>>> max('1', '9', '10', '100') # 返回多个字符串中最大的字符串

'9'

>>> min('1', '9', '10', '100') # 返回多个字符串中最小的字符串

'1'

3. 比较列表或元组

除了数值型、字符串型,max()和min()函数还可以用于比较列表或元组的大小:顺序比较各元素,直至分出大小。当然,用来比较的元素必须是同一种类型,要么都是数值型,要么都是字符串型。

>>> max([8,4],[6,8]) # 返回多个列表中最大的列表

[8, 4]

>>> max([8,4],[8,4,2]) # 返回多个列表中最大的列表

[8, 4, 2]

>>> min(['8',4],['8',4,'2']) # 返回多个列表中最小的列表

['8', 4]

>>> min(('8',4, '3'),('8',4,'2')) # 返回多个元组中最小的元组

('8', 4, '2')

4. 找出字典、字符串、迭代器中的最大最小值

max()和min()函数不仅能比较列表或元组的元素的大小,也能从集合、字典、字符串、range对象、迭代器等对象中找出最大和最小的元素。

>>> max({3,4,5,6}) # 返回集合中的最大值

6

>>> min({'x':5, 'y':7, 'z':3}) # 返回字典元素中的最小值,结果是最小的键

'x'

>>> max("I'm xufive.") # 返回字符串中的最大字符(有点意外吧?)

'x'

>>> min("I'm xufive.") # 返回字符串中的最小字符

' '

>>> max(range(5)) # range()函数返回一个range对象

4

>>> max(map(abs, [-1,2,-3])) # map()函数返回一个迭代器

3

5. 使用key参数

我们注意到,使用max()和min()函数返回字典的最大/最小值,实际得到的是字典的键的最大/最小值。那么如何得到字典的值的最大/最小值呢?很简单,使用max()和min()函数的key参数。不过,需要提醒的是,使用key参数,返回的是字典中最大/最小值的键,而不是最大/最小值。

>>> d = {'x':5, 'y':7, 'z':3}

>>>> min(d) # 返回字典中最小的键

'x'

>>> min(d, key=lambda x:d[x]) # 返回字典中最小值的键,而非最小值

'z'

>>> max(d) # 返回字典中最大的键

'z'

>>> max(d, key=lambda x:d[x]) # 返回字典中最大值的键,而非最大值

'y'

6. 综合练习

最后,我们来做两道练习题,看看max()和min()函数的威力有多大。这两个问题并不难,初学者也能轻松给出答案,但是,要想写得优雅漂亮,非max()和min()函数不可。列表 [1,3,5,7,9,11,13,15,17]中,哪一个元素的正弦值最小?

列表 [8,5,2,4,3,6,5,5,1,4,5] 中,哪一个元素出现的频率最高?

问题1的参考答案:

>>> import math

>>> a = [1,3,5,7,9,11,13,15,17]

>>> min(a, key=math.sin)

11

>>> math.sin(11) # 元素11的正弦值最小

-0.9999902065507035

问题2的参考答案:

>>> a = [8,5,2,4,3,6,5,5,1,4,5]

>>> max(set(a), key=a.count)

5

>>> a.count(5) # 元素5出现了4次,次数最多

4

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值