python之map,zip,reduce,filter的用法

时间:2023-07-22 19:12:02

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)
#

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]