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 的组合。

结束。

原文地址:https://www.cnblogs.com/liusingbon/p/13177945.html