map
map()函数接收两个参数,一个是函数,一个是Iterable
map将传入的函数依次作用到序列的每个元素。并把结果作为新的Iterator
返回。
比如:
def f(x):
return x*x
执行结果如下:
>>> r=map(f,[1,2,3,4,5,6,7,8,9])
>>> r
<map object at 0x0000025CFD3E2A90>
>>> list(r)
[1, 4, 9, 16, 25, 36, 49, 64, 81]
所以map()函数是将运算规则抽象了。我们可以使用map计算更加复杂的问题。
reduce
from functools import reduce
reduce
用法:把函数作用在序列[x1,x2,x3,x4..]
上,这个函数必须接受两个参数,reduce
将结果继续和序列的下一个元素做累积计算。
reduce(f,[x1,x2,x3])=f(f(f(x1,x2),x3),x4)
比如序列求和:
def f(x1,x2):
return x1+x2
执行结果如下:
>>> from functools import reduce
>>> r=reduce(f,[1,2,3,4,5,6,7,8,9,10])
>>> r
55
>>>
filter
作用:filter()
也接受一个函数和一个序列,把传入的函数依次作用于每个元素,根据返回值是True
还是False
决定保留还是丢弃该元素 ,返回值是一个Tterator
所以要想完成计算结果,需要用list()
来获得所有结果并返回list
例如:计算出所有的素数,并显示出1000以内的素数。
def s():#生成一个奇数列
n = 1
while True:
n = n + 2
yield n
def c(n):
return lambda x: x % n>0
def f():#先生成一个无限序列,然后循环使用filter函数将序列不满足的筛除,并生成新的序列
yield 2
it = s() # 初始序列
while True:
n = next(it) # 返回序列的第一个数
yield n
it = filter(c(n), it) # 构造新序列
def fun():#将结果输出
for n in f():
if n < 1000:
print(n)
else:
break
sorted
作用:可以对list进行排序
比如:
sorted([23,14,-13,4])
执行结果为:
>>> sorted([23,14,-13,4])
[-13, 4, 14, 23]
sorted()
函数也可以接受一个key
实现自定义排序
sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower)
['about', 'bob', 'Credit', 'Zoo']
>>>
如上,将字符串按不分大小写进行排序。