zoukankan      html  css  js  c++  java
  • 【转】Python max内置函数详细介绍

    #max()  
      
    array1 = range(10)  
    array2 = range(0, 20, 3)  
    print('max(array1)=', max(array1))  
    print('max(array2)=', max(array2))  
    print('max(array1,)=', max(array1, key=lambda x: x > 3) )  
    print(max(1, 2))  
    print(max('ah', 'bf', key=lambda x: x[1]))  
    print(max(array1, array2, key=lambda x: x[1]))  
      
    def comparator(x):  
       return x[2]  
    print(max('ah2', 'bf3', key=comparator)) 
    
    结果输出如下:
    max(array1)= 9
    max(array2)= 18
    max(array1,)= 4
    2
    ah
    range(0, 20, 3)
    bf3 
    

     说明:

      1. 函数功能为取传入的多个参数中的最大值,或者传入的可迭代对象元素中的最大值。默认数值型参数,取值大者;字符型参数,取字母表排序靠后者。还可以传入命名参数key,其为一个函数,用来指定取最大值的方法。default命名参数用来指定最大值不存在时返回的默认值。

      2. 函数至少传入两个参数,但是有只传入一个参数的例外,此时参数必须为可迭代对象,返回的是可迭代对象中的最大元素。

    >>> max(1) # 传入1个参数报错
    Traceback (most recent call last):
     File "<pyshell#0>", line 1, in <module>
      max(1)
    TypeError: 'int' object is not iterable
    >>> max(1,2) # 传入2个参数 取2个中较大者
    2
    >>> max(1,2,3) # 传入3个参数 取3个中较大者
    3
    >>> max('1234') # 传入1个可迭代对象,取其最大元素值
    '4'

      3. 当传入参数为数据类型不一致时,传入的所有参数将进行隐式数据类型转换后再比较,如果不能进行隐式数据类型转换,则会报错。

    >>> max(1,1.1,1.3E1) # 整数与浮点数可取最大值
    13.0
    >>> max(1,2,3,'3') # 数值与字符串不能取最大值
    Traceback (most recent call last):
     File "<pyshell#5>", line 1, in <module>
      max(1,2,3,'3')
    TypeError: unorderable types: str() > int()
     
    >>> max([1,2],[1,3]) # 列表与列表可取最大值
    [1, 3]
    >>> max([1,2],(1,3)) # 列表与元组不能取最大值
    Traceback (most recent call last):
     File "<pyshell#7>", line 1, in <module>
      max([1,2],(1,3))
    TypeError: unorderable types: tuple() > list()
    

      

      4. 当存在多个相同的最大值时,返回的是最先出现的那个最大值。

    #定义a、b、c 3个列表
    >>> a = [1,2]
    >>> b = [1,1]
    >>> c = [1,2]
     
    #查看a、b、c 的id
    >>> id(a)
    68128320
    >>> id(b)
    68128680
    >>> id(c)
    68128240
     
    #取最大值
    >>> d = max(a,b,c)
    >>> id(d)
    68128320
     
    #验证是否最大值是否是a
    >>> id(a) == id(d)
    True

      5. 默认数值型参数,取值大者;字符型参数,取字母表排序靠后者;序列型参数,则依次按索引位置的值进行比较取最大者。还可以通过传入命名参数key,指定取最大值方法。

    >>> max(1,2) # 取数值大者
    2
    >>> max('a','b') # 取排序靠后者
    'b'
    >>> max('ab','ac','ad') # 依次按索引比较取较大者
    'ad'
     
    >>> max(-1,0) # 数值默认去数值较大者
    0
    >>> max(-1,0,key = abs) # 传入了求绝对值函数,则参数都会进行求绝对值后再取较大者
    -1

      6. key参数的另外一个作用是,不同类型对象本来不能比较取最大值的,传入适当的key函数,变得可以比较能取最大值了。

    >>> max(1,2,'3') #数值和字符串不能取最大值
    Traceback (most recent call last):
     File "<pyshell#21>", line 1, in <module>
      max(1,2,'3')
    TypeError: unorderable types: str() > int()
    >>> max(1,2,'3',key = int) # 指定key为转换函数后,可以取最大值
    '3'
     
    >>> max((1,2),[1,1]) #元组和列表不能取最大值
    Traceback (most recent call last):
     File "<pyshell#24>", line 1, in <module>
      max((1,2),[1,1])
    TypeError: unorderable types: list() > tuple()
    >>> max((1,2),[1,1],key = lambda x : x[1]) #指定key为返回序列索引1位置的元素后,可以取最大值
    (1, 2)
    复制代码

    7. 当只传入的一个可迭代对象时,而且可迭代对象为空,则必须指定命名参数default,用来指定最大值不存在时,函数返回的默认值。

    >>> max(()) #空可迭代对象不能取最大值
    Traceback (most recent call last):
     File "<pyshell#26>", line 1, in <module>
      max(())
    ValueError: max() arg is an empty sequence
    >>> max((),default=0) #空可迭代对象,指定default参数为默认值
    0
    >>> max((),0) #默认值必须使用命名参数进行传参,否则将被认为是一个比较的元素
    Traceback (most recent call last):
     File "<pyshell#27>", line 1, in <module>
      max((),0)
    TypeError: unorderable types: int() > tuple()
    

    原文地址:http://www.jb51.net/article/97571.htm

  • 相关阅读:
    synchronized (lock) 买票demo 线程安全
    springboot项目搭建
    Maven命令
    Mybatis的mapper文件中$和#的用法及区别详解
    mybatis映射文件mapper.xml的写法(collections...)
    MyBatis-动态SQL的if、choose、when、otherwise、trim、where、set、foreach使用(各种标签详解), 以及实体间关系配置
    024 搭建前台系统-----乐优商城工程启动步骤教程
    023 商品管理功能03-----商品修改
    023 商品管理功能02-----商品新增
    022 商品管理功能01-----商品查询
  • 原文地址:https://www.cnblogs.com/hedeyong/p/7599543.html
Copyright © 2011-2022 走看看