• Python学习之旅(十三)


    Python基础知识(12):函数(Ⅲ)

    高阶函数

    1、map

    map()函数接收两个参数,一个是函数,一个是Iterablemap将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回。

    def test(x):
        return x+2
    n=map(test,[1,2,3,4,5])
    list(n)

    结果:

    [3, 4, 5, 6, 7]

    把列表中的数字转换成字符串

    list(map(str,[1,2,3,4,5]))

    结果:

    ['1', '2', '3', '4', '5']

    2、reduce

    接收两个参数,一个函数,一个序列,reduce会把结果继续和序列的下一个元素做累积计算

    如对序列[1,2,3,4,5]求和

    def add(x,y):
        return x+y
    
    reduce(add,[1,2,3,4,5])

    结果:15

    把序列[1,2,3]转换成整数15

    def test(x,y):
        return x*10+y
    
    reduce(test,[1,2,3])

    结果:123

    与map函数配合使用,把str转换成int

    from functools import reduce
    
    digits = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}
    
    def strint(s):
        def fn(x,y):
            return x*10+y
        def charnum(s):
            return digits[s]
        return reduce(fn,map(charnum,s))
    
    strint("123")

    结果:123

    可以用lambda匿名函数进一步简化

    from functools import reduce
    
    digits = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}
    def charnum(s):
        return digits[s]
    
    def strint(s):
        return reduce(lambda x,y:x*10+y,map(charnum,s))
    
    strint("123")

    结果:123

    3、filter

    filter函数用于过滤序列,它接收两个参数,一个函数一个序列

    filter函数会根据函数内的条件遍历序列,判断每个元素的布尔值,如果为True则保留

    filter()函数返回的是一个Iterator,所以要强迫filter()完成计算结果,需要用list()函数获得所有结果并返回list

    def test(x):
        return x%2==0
    
    list(filter(test,[1,3,6,8,10,17]))

    结果:

    [6, 8, 10]

    删除序列中的空字符

    def not_empty(n):
        return n and n.strip()
    
    list(filter(not_empty, ['Alice', '', 'Bob', None, 'May', '  ']))

    结果:

    ['Alice', 'Bob', 'May']

    4、sorted

    可以对字符串和列表中的元素进行排序

    sorted([84,24,1,136,21])

      sorted(["Bob","abc","May","Alice"])

    结果:

    [1, 21, 24, 84, 136]

    ['Alice', 'Bob', 'May', 'abc']

    注:字母进行排序时,大写字母排在小写字母前面

    接收一个key函数实现自定义,如按绝对值大小排序

    sorted([-32,6,10,-1,0],key=abs)

    结果:

    [0, -1, 6, 10, -32]

    对字母进行排序时忽略大小写,即先将字母转换成大写(或小写),然后再进行排序

    sorted(["Bob","abc","May","Alice"],key=str.upper)
    sorted(["Bob","abc","May","Alice"],key=str.lower)

    结果:

    ['abc', 'Alice', 'Bob', 'May']

    如果要进行反向排序,可以使用参数reverse=True

    sorted(["Bob","abc","May","Alice"],key=str.lower,reverse=True)

    结果:

    ['May', 'Bob', 'Alice', 'abc']

  • 相关阅读:
    【BZOJ1831】[AHOI2008]逆序对(动态规划)
    【agc030f】Permutation and Minimum(动态规划)
    【BZOJ3167】[HEOI2013]SAO(动态规划)
    【CF802C】Heidi and Library(网络流)
    【CF671D】Roads in Yusland(贪心,左偏树)
    对偶问题
    【BZOJ2324】[ZJOI2011]营救皮卡丘(网络流,费用流)
    【BZOJ3691】游行(网络流)
    【CF908G】New Year and Original Order(动态规划)
    【CF809C】Find a car(动态规划)
  • 原文地址:https://www.cnblogs.com/finsomway/p/10011282.html
Copyright © 2020-2023  润新知