美文网首页
map,filter,max,min四个key的内置函数的简单理

map,filter,max,min四个key的内置函数的简单理

作者: NewForMe | 来源:发表于2018-11-14 10:02 被阅读0次

    一、filter

    filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。
    filter(function, iterable(可迭代对象))
    例1:要从一个list [1, 4, 6, 7, 9, 12, 17]中删除偶数,保留奇数,首先,要编写一个判断奇数的函数。

    def is_odd(x):
        return x % 2 == 1
    

    然后,利用filter()过滤掉偶数。

    filter(is_odd, [1, 4, 6, 7, 9, 12, 17])
    
    #输出结果为:[1, 7, 9, 17]
    

    例2:利用filter() 删除 None 或者空字符串:

    def is_not_empty(s):
        return s and len(s.strip()) > 0
    
    filter(is_not_empty, ['test', None, '', 'str', '  ', 'END'])
    
    #执行结果: ['test', 'str', 'END']
    

    filter这些内置函数一般都喜欢与lambda一起搭配使用,因此上述的两个例子,其实可以直接用一行代码改写为:

    #例1:
    filter(lambda x :x %2==1, [1, 4, 6, 7, 9, 12, 17])
    #例2:
    filter(lambda s:s and len(s.strip())>0, ['test', None, '', 'str', '  ', 'END'])
    

    二、map

    map()函数应用于每一个可迭代的项,返回的是一个结果list。
    如果有其他的可迭代参数传进来,map()函数则会把每一个参数都以相应的处理函数进行迭代处理。
    map()函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回。
    map(function, iterable(可迭代对象))
    例3:有一个list, L = [1,2,3,4,5,6,7,8],我们要将f(x)=x^2作用于这个list上,那么我们可以使用map函数处理。

    L = [1,2,3,4,] 
    def pow2(x): 
        return x*x 
    
    map(pow2,L) 
    #返回的是一个迭代对象,循环后输出结果:[1, 4, 9, 16] 
    #lambda写法:
    map(lambda x :x*x, L) 
    

    三、max

    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'
    
    1. 当传入参数为数据类型不一致时,传入的所有参数将进行隐式数据类型转换后再比较,如果不能进行隐式数据类型转换,则会报错。
    >>> 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()
    
    1. 当存在多个相同的最大值时,返回的是最先出现的那个最大值。
    #定义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
    
    1. 默认数值型参数,取值大者;字符型参数,取字母表排序靠后者;序列型参数,则依次按索引位置的值进行比较取最大者。还可以通过传入命名参数key,指定取最大值方法。
    >>> max(1,2) # 取数值大者
    2
    >>> max('a','b') # 取排序靠后者
    'b'
    >>> max('ab','ac','ad') # 依次按索引比较取较大者
    'ad'
    
    >>> max(-1,0) # 数值默认去数值较大者
    0
    >>> max(-1,0,key = abs) # 传入了求绝对值函数,则参数都会进行求绝对值后再取较大者
    -1
    
    1. 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)
    
    1. 当只传入的一个可迭代对象时,而且可迭代对象为空,则必须指定命名参数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()
    

    四、min

    min 函数与max函数的用法基本一致,只是min函数是用来求迭代对象的最小值,max是用来求最大值。

    相关文章

      网友评论

          本文标题:map,filter,max,min四个key的内置函数的简单理

          本文链接:https://www.haomeiwen.com/subject/wghdfqtx.html