max in Python

max(iterable[, args...][, key])

With a single argument iterable, return the largest item of a non-empty iterable (such as a string, tuple or list). With more than one argument, return the largest of the arguments.

 首先,这里表示了max中需要包括的两个参数(注意,是两个,而不是三个),其中iterable是形容词,也就是说第一个args元素集合中每个对象都是可迭代的(这里的集合不是py中的集合,只表示元素的总合)。

 对于args来说,分为两种情况:单元素和多元素。对于单元素而言,结果是该对象中的某一项(如果是字符串,则结果是字符,如果是列表或者元组,结果就是其中一个元素)。如果是多元素,则结果是某个元素。

The optional key argument specifies a one-argument ordering function like that used for list.sort(). The key argument, if supplied, must be in keyword form (for example, max(a,b,c,key=func)).

 这里的key参数是可有可无的。如果是没有的话,那返回的结果就是默认值(如多个数字,则是最大的数,如果是多个字符串,则返回首字母ascii最大的字符串,这里不进行赘述)。

 我们重点讨论包括key参数的情况。刚才讲到了args的单元素和多元素,其实和这里是紧密相关的。

 我们先举两个例子,用map、reduce、filter三个函数分别实现在单元素和多元素情况下的max。

单元素

text ='apple abstract'
max('abcdefghiz', key = text.count) #这里的key=必不可少,否则会不起作用

data = 'apple abstract'
s = 'abcdefghiz'
m = map(lambda x,y:x.count(y), [data]*len(s), s)
r = reduce(max, m)
result = filter(lambda x:data.count(x)==r, data)[0]

多元素

max('ah', 'bf', key = lambda x:x[1]) #这里的key=必不可少,否则会不起作用

data = ['ah', 'bf']
m = map(lambda x:x[1], data)
r = reduce(max, m)
result = filter(lambda x:x[1]==r, data)[0]

 需要我们注意的是,在这两种情况下,函数的调用方和被调用方是不同的。在单元素情况下,函数的调用方是在key中的,函数的调用参数是在args中的,而且调用参数是变化的,是对args中的值进行迭代的。而在多元素情况下,调用方是在args中的。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,534评论 19 139
  • //Clojure入门教程: Clojure – Functional Programming for the J...
    葡萄喃喃呓语阅读 9,228评论 0 7
  • 内置函数Python解释器内置了许多功能和类型,总是可用的。他们是按字母顺序列在这里。 abs(x)返回一个数的绝...
    uangianlap阅读 5,034评论 0 0
  • 个人笔记,方便自己查阅使用 Py.LangSpec.Contents Refs Built-in Closure ...
    freenik阅读 67,824评论 0 5
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,958评论 18 399