一、map()函数
map()是 Python 内置的高阶函数,它接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回。
map(function, iterable, ...) function -- 函数 iterable -- 一个或多个序列
Python 2.x 返回列表。
Python 3.x 返回迭代器。
1、当seq只有一个时,将函数func作用于这个seq的每个元素上,并得到一个新的seq。
res = map((lambda x: x**2 if x < 3 else x**3), [1, 2, 3, 4, 5])
for i in res:
print(i)
注:
1.map()函数不改变原有的 list,而是返回一个新的 list。
2.利用map()函数,可以把一个 list 转换为另一个 list,只需要传入转换函数。
例:假设用户输入的英文名字不规范,没有按照首字母大写,后续字母小写的规则,请利用map()函数,把一个list(包含若干不规范的英文名字)变成一个包含规范英文名字的list:
输入:['adam', 'LISA', 'barT']
输出:['Adam', 'Lisa', 'Bart']
def format_name(s):
s1 = s[0:1].upper()+s[1:].lower()
return s1
res = map(format_name, ['adam', 'LISA', 'barT'])
for i in res:
print(i)
2、当seq多于一个时,map可以并行(注意是并行)地对每个seq执行过程。
l2 = map(lambda x, y: x**y, [1, 2, 3], [1, 2, 3])
for i in l2:
print(i)
'''
1
4
27
'''
l3 = map(lambda x, y: (x**y, x+y), [1, 2, 3], [1, 2, 3])
for i in l3:
print(i)
# 打印三个元祖
'''
(1, 2)
(4, 4)
(27, 6)
'''
python3中可以处理类表长度不一致的情况,但无法处理类型不一致的情况。
l4 = map(lambda x, y: (x**y, x+y), [1, 2, 3], [1, 2])
for i in l4:
print(i)
'''
(1, 2)
(4, 4)
'''
二、reduce()函数
用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果。即reduce() 函数会对参数序列中元素进行累积。
reduce(function, iterable[, initializer])
function -- 函数,有两个参数
iterable -- 可迭代对象
initializer -- 可选,初始参数
可计算列表元素和或阶乘。
注:在 Python3 中,reduce() 函数已经被从全局名字空间里移除了,它现在被放置在 functools 模块里,如果想要使用它,则需要通过引入 functools 模块来调用 reduce() 函数:
from functools import reduce
num = [1, 2, 3, 4, 5]
print(reduce(lambda x, y: x + y, num, 1))
print(reduce(lambda x, y: x * y, num))
# 输出
'''
16
120
'''
三、filter()函数
该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。
filter(function, iterable)
function -- 判断函数。
iterable -- 可迭代对象。
Python 2.x 返回列表。
Python 3.x 返回迭代器。
# 过滤出列表中的所有奇数
num = [1, 2, 3, 4, 5]
newlist = filter(lambda x: x % 2 == 1, num)
for i in newlist:
print(i, end=' ')
# 输出
'''
1 3 5
'''
四、all()与any()
any(x)判断x对象是否为空对象,如果都为空、0、false,则返回false,如果不都为空、0、false,则返回true
all(x)如果all(x)参数x对象的所有元素不为0、' '、False或者x为空对象,则返回True,否则返回False
五、zip()函数
zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的对象,这样做的好处是节约了不少的内存。
我们可以使用 list() 转换来输出列表。
print(list(zip(('a', 'n', 'c'), (1, 2, 3))))
print(list(zip(('a', 'n', 'c'), (1, 2, 3, 4))))
print(list(zip(('a', 'n', 'c', 'd'), (1, 2, 3))))
[('a', 1), ('n', 2), ('c', 3)]
[('a', 1), ('n', 2), ('c', 3)]
[('a', 1), ('n', 2), ('c', 3)]