在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

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

  1. python父亲节礼物_父亲节程序员硬核示爱:你能看懂几条

    摘要:祝所有的父亲,节日快乐! 父亲节要送什么? 对老爸的爱在心口难开怎么办? 都说父爱如山,山也需要偶尔的温情问候,与其在网上遍寻各种攻略,不如敲起手中的键盘,码出几行代码,用你最熟悉的方式表达对父 ...

  2. python交流企鹅裙_神级程序员巧用python开发王者荣耀把妹神器,一路升级上王者!...

    Python(发音:英[?pa?θ?n],美[?pa?θɑ:n]),是一种面向对象.直译式电脑编程语言,也是一种功能强大的通用型语言,已经具有近二十年的发展历史,成熟且稳定.它包含了一组完善而且容易理 ...

  3. python中国地图程序设计_神级程序员教你用Python如何画一个中国地图!(好好玩)...

    为什么是Python 先来聊聊为什么做数据分析一定要用 Python 或 R 语言.编程语言这么多种, Java , PHP 都很成熟,但是为什么在最近热火的数据分析领域,很多人选择用 Python ...

  4. 爬虫python软件收费吗_身为一个程序员看小说还需要花钱么,不存在的,Python爬虫摆设的...

    虽然说Python可以爬取小说,但是咱们还是得支持作者的辛苦写作的结果,支持正版! 本篇文章虽然是爬取网络小说,主要还是学习交流为主嘛! 什么是网络爬虫 百度百科解释: 网络爬虫(又被称为网页蜘蛛,网 ...

  5. python count函数时间复杂度_关于python:了解如何测量函数的时间复杂度

    这是功能: 1 2 3 4 5 6 7 8 9c = [] def badsort(l): v = 0 m = len(l) while v c.append(min(l)) l.remove(min ...

  6. python index函数时间复杂度_初学python之以时间复杂度去理解列表常见使用方法

    列表list,一个有序的队列 列表内的个体为元素,由若干个元素按照顺序进行排列,列表是可变化的,也就是说可以增删 list定义 常用的列表定义方式: 使用[] 或者 a = list() 取数列表可以 ...

  7. python类高级用法_十.python面向对象高级用法

    1.反射 1.1 什么是反射 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力(自省).这一概念的提出很快引发了计算机科学领域关于应用反射性的 ...

  8. python垃圾回收离职_详细解说python垃圾回收机制

    不同于C/C++,像Python这样的语言是不需要程序员写代码来管理内存的,它的GC(Garbage Collection)机制 实现了自动内存管理.GC做的事情就是解放程序员的双手,找出内存中不用的 ...

  9. python培训出来的有公司要吗-参加Python培训到底需要学什么?好程序员

    原标题:参加Python培训到底需要学什么?好程序员 参加Python培训到底需要学什么?好程序员,参加Python培训到底需要学什么?在选择靠谱的北京Python工程师培训之前,你自己也要对Pyth ...

最新文章

  1. 特斯拉再出车祸,两死一伤,这次是Model S
  2. C++流的streambuf详解及TCP流的实现
  3. python怎么捕获mysql报错
  4. SSD 通俗易懂介绍
  5. [GO语言基础] 三.变量声明、数据类型、标识符及编程练习12题
  6. bootstraptable控制分页_bootstrap-table后端分页功能完整实例
  7. 谷歌浏览器该扩展程序未列在Chrome网上应用店中解决方法
  8. Javaweb之session创建销毁问题
  9. 基于JAVA+SpringBoot+Mybatis+MYSQL的网上商城系统
  10. 计算机流水线作业员做什么,电子厂普通作业员的工作流程是什么
  11. transferwise怎么提现_收款工具transfer wise介绍(多币种、可收CJ联盟)
  12. 【语音处理】基于matlab GUI语音原始信号+变速信号时域频域分析(带面板)【含Matlab源码 294期】
  13. 勒索病毒在线解密网站汇总
  14. BOM有效日期的设置
  15. php向redis list一次性lpush多个值
  16. nginx: [emerg] events directive is not allowed here in /opt/myapi/nginx.conf:XX
  17. Anaconda3\Scripts\activate.bat 不是内部或外部命令,也不是可运行的程序的问题处理方法
  18. jsch jar包连接不上ssh报Algorithm negotiation fail 错误
  19. LFS 与 BLFS 总体解读
  20. python拼图游戏代码的理解_Python编写的数字拼图游戏(含爬山算法人机对战功能)...

热门文章

  1. 【面试题】HashMap 面试 21 问
  2. docker安装软件(vim,service)
  3. mvn使用assembly打包所有的moudle为一个tgz文件
  4. hive-04-Hive函数大全
  5. DNS 反向解析出错 Error in named configuration: zone centos.vbird/IN: loaded serial 2011080401
  6. MyBatis-Plus: 谨慎入坑
  7. SpringBoot 优雅的配置拦截器方式
  8. 面试中被问到HashMap的结构,1.7和1.8有哪些区别?这篇做深入分析!
  9. SQL2008数据类型
  10. 虚拟化+云服务器,虚拟化+云服务器