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