美文网首页Python
详解Python中的 zip、zip(*)、map、reduce

详解Python中的 zip、zip(*)、map、reduce

作者: 超级超级小天才 | 来源:发表于2020-08-21 00:02 被阅读0次

    其他关于Python的总结文章请访问:https://www.jianshu.com/nb/47435944

    详解Python中的 zip、zip(*)、map、reduce、filter

    zip和zip(*)

    zip() 函数接受(零个)、一个、多个可迭代对象(iterable)为参数,将这些 iterable 合并成一个tuple,返回一个对象,可以使用 list 将返回的 zip 对象转换成列表,列表的长度是所有传入的 iterable 对象中可迭代最短的个数
    zip(*)zip 的逆过程,可以将一个 zip 对象返回成多个 iterable 对象,返回的结果依然可以使用 list 转换成列表

    a = [1, 2, 3]
    b = [4, 5, 6]
    c = [7, 8, 9, 10, 11]
    
    zip1 = zip(a,b)
    print(zip1)
    print(list(zip1))
    
    zip2 = zip(a,b,c)
    print(list(zip2))
    
    [a1, b1] = zip(*zip1)
    print(list(a1))
    
    ------
    
    <zip object at 0x103abc288>
    [(1, 4), (2, 5), (3, 6)]
    [(1, 4, 7), (2, 5, 8), (3, 6, 9)]
    [1, 2, 3]
    

    map和reduce

    map 函数接受两个参数,一个是一个函数,另一个是一个可迭代对象(iterable),map将该函数依次作用给可迭代对象中的每一个元素,然后返回的结果再封装成一个迭代器(iterator

    def f(x):
        return x**2
    
    s = map(f,range(10))
    print(s)
    print(list(s))
    <map object at 0x000001D8D906DD48>
    [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
    

    ·reduce函数需要从functools` 包中引入:

    from functools import reduce
    

    reduce 接受的参数和 map 一样,不同的作用是 reduce 是依次根据传入的可迭代对象的每个元素,然后把每一次的结果跟下一个元素进行计算,也就是说他的效果是这样的:

    reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
    

    比如一个很经典的结合 mapreduce 一起使用的例子是将一个纯数字的 string 变成 int 值:

    from functools import reduce
    def f(x,y):
        return x*10 + y
    
    def g(c):
        digits = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}
        return digits[c]
    
    a = reduce(f,map(g,'13579'))
    print(a)
    print(type(a))
    
    ------
    
    13579
    <class 'int'>
    

    filter函数

    filter 函数和 map 类似,但是 filter 是根据所接收的那个函数的返回结果是 True 还是 False 来筛选传入的那个可迭代对象中的元素,如果该函数作用在一个元素上时返回的是 True,那么这个元素也会出现在返回的结果中,反之就不会被返回:

    def isOdd(a):
        return a%2 == 1
    print(list(filter(isOdd, [1,2,3,4,5,6,7,8,9])))
    
    ------
    
    [1, 3, 5, 7, 9]
    

    相关文章

      网友评论

        本文标题:详解Python中的 zip、zip(*)、map、reduce

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