reduce filter和map

1. map

(1)map(function, iterable,……) ,第一个参数是一个函数,第二个参数是一个可迭代的对象,第一个参数function以参数序列中的每一个元素调用function函数,返回包含每次function函数返回值的一个迭代器。

def run(x):
    return x**2


f = map(run, [1, 2, 3, 4, 5])
print(f)
for i in f:
    print(i)

运行结果如下:

<map object at 0x000001D645B71860>
1
4
9
16
25

在Python2中返回的是一个列表,但在Python3中返回的是一个迭代器。上述程序是在Python3中执行的。

其实上述程序还可以这样写

f = map(lambda x: x**2, range(1, 6))
print(f)
for i in f:
    print(i)

或者

f = map(lambda x: x**2, [1, 2, 3, 4, 5])
print(f)
for i in f:
    print(i)

(2)map中有多个可迭代对象

f = map(lambda x, y: x+y, [1, 2, 3, 4, 5], [1, 2, 3, 4, 5])
print(f)
for i in f:
    print(i)

返回结果

<map object at 0x0000020260C41FD0>
2
4
6
8
10

2. filter

filter(function, iterable) filter函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。

def run(num):
    return num % 2 == 1


p = filter(run, [1, 2, 3, 4, 5, 6])
print(p)
for i in p:
    print(i)

运行结果是

<filter object at 0x000001C5D54B19E8>
1
3
5

下面是用lambda函数写的

f = filter(lambda x: x % 2 == 1, [1, 2, 3, 4, 5, 6])
print(f)
for i in f:
    print(i)

当把lambda表达式的返回结果改为零时

f = filter(lambda x: x % 2 ==0, [1, 2, 3, 4, 5, 6])
print(f)
for i in f:
    print(i)

运行结果如下

<filter object at 0x00000269903A18D0>
2
4
6

3. reduce

在Python3中没有reduce内置函数,但在functools中有reduce类,reduce调用的格式:reduce(function, iterable),reduce的作用是将传给function(有两个参数 )对集合中的第1、2个元素进行操作,得到的结果再与第三个元素用function函数进行运算……

下面看一个程序

from functools import reduce
f = reduce(lambda x, y: x*y, [1, 2, 3, 4, 5])
print(f)

运行结果如下

120





猜你喜欢

转载自blog.csdn.net/qwerLoL123456/article/details/81044966