共计 2067 个字符,预计需要花费 6 分钟才能阅读完成。
filter、map、reduce、zip、enumerate
这几个函数在 Python 外面被称为高阶函数,本文次要学习它们的用法。
filter
filter 函数原型如下:
filter(function or None, iterable) --> filter object
第一个参数是判断函数(返回后果须要是 True 或者 False),第二个为序列,该函数将对 iterable
序列顺次执行 function(item)
操作,返回后果是过滤之后后果组成的序列。
简略记忆:对序列中的元素进行筛选,获取符合条件的序列。
my_list = [1, 2, 3]
my_new_list = filter(lambda x: x > 2, my_list)
print(my_new_list)
返回后果为:<filter object at 0x0000000001DC4F98>
,应用 list
函数能够输出序列内容。
map
map 函数原型如下:
map(func, *iterables) --> map object
该函数运行之后生成一个 list,第一个参数是函数、第二个参数是一个或多个序列;
下述代码是一个简略的测试案例:
my_list = [-1,2,-3]
my_new_list = map(abs,my_list)
print(my_new_list)
上述代码运行结束,失去的后果是:<map object at 0x0000000002860390>
。应用 print(list(my_new_list))
能够失去后果。
map
函数的第一个参数,能够有多个参数,当这种状况呈现后,前面的第二个参数须要是多个序列。
def fun(x, y):
return x+y
# fun 函数有 2 个参数,故须要两个序列
my_new_list = map(fun, [1, 2, 3], [4, 4, 4])
print(my_new_list)
print(list(my_new_list))
map 函数解决的问题:
- 应用
map
函数,不须要创立一个空列表; - 调用函数的时候,不须要带括号了,
map
函数会主动调用指标函数; map
函数会主动匹配序列中的所有元素。
reduce
reduce 函数原型如下:
reduce(function, sequence[, initial]) -> value
第一个参数是函数,第二个参数是序列,返回计算结果之后的值。该函数价值在于滚动计算利用于列表中的间断值。
测试代码如下:
from functools import reduce
my_list = [1, 2, 3]
def add(x, y):
return x+y
my_new_list = reduce(add, my_list)
print(my_list)
print(my_new_list)
最终的后果是 6,如果设置第三个参数为 4,能够运行代码查看后果,最初失去的论断是,第三个参数示意初始值,即累加操作初始的数值。
my_new_list = reduce(add, my_list,4)
print(my_list)
print(my_new_list)
简略记忆:对序列内所有元素进行累计操作。
zip
zip 函数原型如下:
zip(iter1 [,iter2 [...]]) --> zip object
zip
函数将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,而后返回由这些元组组成的列表。
如果各个迭代器的元素个数不一样,则返回列表长度与最短的对象雷同,利用星号(*
)操作符,能够将元组解压为列表。
测试代码如下:
my_list1 = [1,2,3]
my_list2 = ["a","b","c"]
print(zip(my_list1,my_list2))
print(list(zip(my_list1,my_list2)))
展现如何利用 *
操作符:
my_list = [(1, 'a'), (2, 'b'), (3, 'c')]
print(zip(*my_list))
print(list(zip(*my_list)))
输入后果如下:
<zip object at 0x0000000002844788>
[(1, 2, 3), ('a', 'b', 'c')]
简略记忆:zip 的性能是映射多个容器的类似索引,能够不便用于来结构字典。
enumerate
enumerate 函数原型如下:
enumerate(iterable, start=0)
参数阐明:
sequence
:一个序列、迭代器或其余反对迭代对象;start
:下标起始地位。
该函数用于将一个可遍历的数据对象组合为一个索引序列,同时列出数据和数据下标,个别用在 for
循环当中。
测试代码如下:
weekdays = ['Mon', 'Tus', 'Wen', 'Thir']
print(enumerate(weekdays))
print(list(enumerate(weekdays)))
返回后果为:<enumerate object at 0x0000000002803AB0>
。
这篇博客的总结
本文波及的函数能够与 lambda 表达式进行联合,能大幅度提高编码效率。最好的学习材料永远是官网手册