python之map,zip,reduce,filter的用法
1、reduce(func,iterable,initial):
参数:
- func 可执行函数
- iterable 可迭代对象
- initial 可选,初始参数
功能描述:调用func函数后,发生迭代,每次迭代,都会将上一次迭代结果和可迭代对象中的下一个元素传入func中执行。initial是可选的,如果给了一个值,则第一个元素用给的值,没给的话就用序列中的第一个值,然后返回函数运行后的结果
示例:
from functools import reduce content=reduce(lambda x,y:x+y,[i for i in range(101)]) print(content) # 5050
2、zip([iterable, ...])
参数:
- iterable 一个或多个序列
功能描述:这个函数可以将传进去的多个列表进行配对,让对应索引上的值放进同一个元组里,再通过list 或tuple强转(这样才可以打印出结果,而不是一个内存地址),将每一个元组放进一个列表或元组里。
示例:
a = [1,2,3] b = [4,5,6] c = [4,5,6,7,8] zipped = zip(a,b) # 打包为元组的列表 print(list(zipped)) # [(1, 4), (2, 5), (3, 6)] print(list(zip(a,c))) # 元素个数与最短的列表一致 # [(1, 4), (2, 5), (3, 6)]
3、map(func, iterable, ...):
参数:
- func 可执行函数
- iterable 一个或多个序列
功能描述:将func作用于每一个iterable中的每一个元素,也需要通过list或 tuple强转,如果func为None,则和zip()一样;
示例:
listx = [1,2,3,4,5,6,7] # 7 个元素 listy = [20,30,40,50,60,70] # 6 个元素 listz = [100,100,100,100] # 4 个元素 list_result = map(lambda x,y,z : x + y + z,listx, listy, listz) print(list(list_result)) # [121, 132, 143, 154]
可以看出,如果有多个序列,会按照最少元素的序列计算结果
4、filter(func, iterable)
参数:
- func 判断函数。
- iterable 可迭代对象。
功能描述:
将序列的每个元素作为参数传递给函数进行判断,然后返回 True 或 False,最后将返回 True 的元素放到新迭代器中。
示例:
# 过滤出列表中的所有奇数 def is_odd(n): return n % 2 == 1 newlist = filter(is_odd, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) print(list(newlist)) # [1, 3, 5, 7, 9]