Python【map、reduce、filter】内置函数使用说明(转载)

python

介绍下Python 中 map,reduce,和filter 内置函数的方法:

一:map

map(...)

map(function, sequence[, sequence, ...]) -> list

说明:

      对sequence中的item依次执行function(item),执行结果输出为list。

例子:

>>> map(str, range(5))           #对range(5)各项进行str操作

['0', '1', '2', '3', '4'] #返回列表

>>> def add(n):return n+n

...

>>> map(add, range(5)) #对range(5)各项进行add操作

[0, 2, 4, 6, 8]

>>> map(lambda x:x+x,range(5)) #lambda 函数,各项+本身

[0, 2, 4, 6, 8]
>>> map(lambda x:x+1,range(10)) #lambda 函数,各项+1
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> map(add,'zhoujy')

['zz', 'hh', 'oo', 'uu', 'jj', 'yy']

#想要输入多个序列,需要支持多个参数的函数,注意的是各序列的长度必须一样,否则报错:

>>> def add(x,y):return x+y

...

>>> map(add,'zhoujy','Python')

['zP', 'hy', 'ot', 'uh', 'jo', 'yn']

>>> def add(x,y,z):return x+y+z

...

>>> map(add,'zhoujy','Python','test') #'test'的长度比其他2个小

Traceback (most recent call last):

File "<stdin>", line 1, in <module>

TypeError: add() takes exactly 2 arguments (3 given)

>>> map(add,'zhoujy','Python','testop')

['zPt', 'hye', 'ots', 'uht', 'joo', 'ynp']

二:reduce

reduce(...)

reduce(function, sequence[, initial]) -> value

说明:

      对sequence中的item顺序迭代调用function,函数必须要有2个参数。要是有第3个参数,则表示初始值,可以继续调用初始值,返回一个值。

例子:

>>> def add(x,y):return x+y

...

>>> reduce(add,range(10)) #1+2+3+...+9

45

>>> reduce(add,range(11)) #1+2+3+...+10

55

>>> reduce(lambda x,y:x*y,range(1,3),5) #lambda 函数,5是初始值, 1*2*5

10

>>> reduce(lambda x,y:x*y,range(1,6)) #阶乘,1*2*3*4*5

120

>>> reduce(lambda x,y:x*y,range(1,6),3) #初始值3,结果再*3

360
>>> reduce(lambda x,y:x+y,[1,2,3,4,5,6]) #1+2+3+4+5+6
21

三:filter

filter(...)

filter(function or None, sequence) -> list, tuple, or string

说明:

      对sequence中的item依次执行function(item),将执行结果为True(!=0)的item组成一个List/String/Tuple(取决于sequence的类型)返回,False则退出(0),进行过滤。

例子:

>>> def div(n):return n%2

...

>>> filter(div,range(5)) #返回div输出的不等于0的真值

[1, 3]

>>> filter(div,range(10))

[1, 3, 5, 7, 9]

>>> filter(lambda x : x%2,range(10)) #lambda 函数返回奇数,返回列表

[1, 3, 5, 7, 9]

>>> filter(lambda x : not x%2,range(10))

[0, 2, 4, 6, 8]

>>> def fin(n):return n!='z' #过滤'z' 函数,出现z则返回False

...

>>> filter(fin,'zhoujy') #'z'被过滤

'houjy'

>>> filter(lambda x : x !='z','zhoujy') #labmda返回True值

'houjy'

>>> filter(lambda x : not x=='z','zhoujy') #返回:字符串

'houjy'

上面的这些例子中都用到了一个 lambda表达式,下面举个例子,更多信息见这里。

>>> a=lambda x:x+3

>>> a(2)

5

>>> a=lambda x,y:x+y

>>> a(2,3)

5

四,应用map,reduce,filter

1):实现5!+4!+3!+2!+1!

#!/usr/bin/env python

#-*- coding:utf-8 -*-

def add_factorial(n):

empty_list=[] #声明一个空列表,存各个阶乘的结果,方便这些结果相加

for i in map(lambda x:x+1,range(n)): #用传进来的变量(n)来生成一个列表,用map让列表都+1,eg:range(5) => [1,2,3,4,5]

a=reduce(lambda x,y:x*y,map(lambda x:x+1,range(i))) #生成阶乘,用map去掉列表中的0

empty_list.append(a) #把阶乘结果append到空的列表中

return empty_list

if __name__ == '__main__':

import sys

#2选1

#(一)

try:

n = input("Enter a Number(int) : ")

result=add_factorial(n) #传入变量

print reduce(lambda x,y:x+y,result) #阶乘结果相加

except (NameError,TypeError):

print "That's not a Number!"

#(二)

# result = add_factorial(int(sys.argv[1])) #传入变量

# print reduce(lambda x,y:x+y,result) #阶乘结果相加

结果:

zhoujy@zhoujy:~/桌面/Python/4$ python factorial.py

Enter a Number(int) : 1

1

zhoujy@zhoujy:~/桌面/Python/4$ python factorial.py

Enter a Number(int) : 2

3

zhoujy@zhoujy:~/桌面/Python/4$ python factorial.py

Enter a Number(int) : 3

9

zhoujy@zhoujy:~/桌面/Python/4$ python factorial.py

Enter a Number(int) : 4

33

zhoujy@zhoujy:~/桌面/Python/4$ python factorial.py

Enter a Number(int) : 5

153

zhoujy@zhoujy:~/桌面/Python/4$

2):将100~200以内的质数挑选出来

思路:

质数是指:只有1和它本身两个因数,如2、3、5、7都是质数,即能被1和本身整除,1不是质数。
比如一个数字N,看它是否质数的话,就要看:有没有能整除【2,N】之间的数X(不包含本身),即N%X是否为0,要是没有就为质数。
所以我们要实现的算法是:拿一个数字N,去除以【2,N】之间的数X,来得到质数,即:N/2,N/3,……,N/N-2,N/N-1   ===> N/range(2,N)

#!/usr/bin/env python

#-*- coding:utf-8 -*-

def is_prime(start,stop):

stop = stop+1 #包含列表右边的值

prime = filter(lambda x : not [x%i for i in range(2,x) if x%i == 0],range(start,stop)) #取出质数,x从range(start,stop) 取的数

print prime

if __name__ == '__main__':

try :

start = input("Enter a start Number :")

except :

start = 2 #开始值默认2

try :

stop = input("Enter a stop Number :")

except :

stop = 0 #停止数,默认0,即不返回任何值

is_prime(start,stop)

结果:

zhoujy@zhoujy:~/桌面/Python/4$ python prime.py 

Enter a start Number :

Enter a stop Number :10

[2, 3, 5, 7]

zhoujy@zhoujy:~/桌面/Python/4$ python prime.py

Enter a start Number :10

Enter a stop Number :20

[11, 13, 17, 19]

zhoujy@zhoujy:~/桌面/Python/4$ python prime.py

Enter a start Number :

Enter a stop Number :

[]

以上是 Python【map、reduce、filter】内置函数使用说明(转载) 的全部内容, 来源链接: utcz.com/z/387736.html

回到顶部