• Python列表_Map, filter, reduce运算


    Map, filter, reduce 列表中最重要的三种运算

    1. reduce方法介绍

    要得到列表中所有值的综合,你可以用下面这样的一个循环来实现:

    $ cat c.py

    #!/bin/python

    def add_all(t):

        total = 0

        for x in t:

            total += x

        return total

    t = [20, 30, 40]

    print(add_all(t))

    $ python3 c.py

    90

    total 的初始值为0,每次循环的时候,x 都得到列表t中一个元素的值。+=这个运算符是更新变量的一种简写。这个运算符是扩展了赋值语句,total += x 就等同于 total = total +x 。

    随着循环的运行,total 积累了所有元素的综合值,这种变量也叫做累加器。

    把列表中所有元素加起来是一种很常用的运算,所以 Python 提供了内置的函数 sum:

     t = [23 ,34, 56]

    >>> sum(t)

    113

    这种把一系列列表元素组合成一个单值的运算,也叫做 reduce。

    2. map方法介绍

    有时候建立一个列表需要遍历另一个列表。比如下面的这个函数就接收一个字符串列表,将所有字符串变为大写字母组成的,然后返回一个这些大写字符串组成的新列表:

    $ cat c.py

    #!/bin/python

    def capitalize_all(t):

        res = []

        for s in t:

            res.append(s.capitalize())

        return res

    t = ['a', 'b', 'c']

    print(capitalize_all(t))

    $ python3 c.py

    ['A', 'B', 'C']

    res 的初始值为一个空列表,每次循环的时候,我们都把下一个元素用append方法拼接上去。所以res也算是另外一种累加器了。

    像上面这个capitalize_all 的运算也叫做一个map,因为这种预算将某一函数应用到一个序列中的每个元素上(比如这个例子中capitalize这个方法)。

    3.filter方法介绍

    另外一种常见运算是从列表中选取一些元素,然后返回一个次级列表。

    比如,下面的函数接收一个字符串列表,然后返回一个其中只包含大写字母的字符串所组成的列表:

    $ cat c.py

    #!/bin/python

    def only_upper(t):

        res = []

        for s in t:

            if s.isupper():

               res.append(s)

        return res

    t = ['a', 'b', 'c']

    print(only_upper(t))

    $ python3 c.py

    []                 #列表t的元素全是小写,过滤后就返回空列表

    $ cat c.py

    #!/bin/python

    def only_upper(t):

        res = []

        for s in t:

            if s.isupper():

               res.append(s)

        return res

    t = ['a', 'b', 'c', 'E', 'F']

    print(only_upper(t))

    $ python3 c.py

    ['E', 'F']            #过滤到2个大写字母

    isupper 是一个字符串方法,如果字符串中只包含大写字母就会返回真。
    only_upper 这样的运算也叫 filter(过滤器),因为这种运算筛选出特定的元素,过滤掉其他的。

    常用的列表运算都可以表示成 map、filter 以及 reduce 的组合。

    结束。

  • 相关阅读:
    读《奇点临近》
    C++中rand()函数的用法
    第四届蓝桥杯 c/c++真题
    ACM做题过程中的一些小技巧
    树状数组
    go单元测试进阶篇
    浓缩的才是精华:浅析GIF格式图片的存储和压缩
    腾讯IVWEB团队:WebRTC 点对点直播
    Mongodb Geo2d索引原理
    Unity编译Android的原理解析和apk打包分析
  • 原文地址:https://www.cnblogs.com/liusingbon/p/13177945.html
Copyright © 2020-2023  润新知