python 内建函数filter() ,map(),reduce()

时间:2022-05-07 20:25:16

 python 内建函数 filter() 过滤函数

           seq[0] seq[1] seq[3] '''  seq[n-1]

     seq [   |      |       |           |       ]

             

        |----------------------------------------|

        |   0       1       1   bool_func        |

        |----------------------------------------|

                    

filter_seq[      seq[1]  sed[3]              ]

                                                   filter()

 

例子一:

  
 
 
  1. >>> from random import randint 
  2. >>> allnum = [] 
  3. >>> def filter_seq(n): 
  4. ...     return n % 2 
  5. ...  
  6. >>> for i in range(9): 
  7. ...     allnum.append(randint(1,100)) 
  8. ...  
  9. >>> allnum 
  10. [59735695715987343
  11. >>> print filter(filter_seq,allnum) 
  12. [597356957157343

6 -7 的目的是产生 10个随机数,然后调用filter来益处所有的偶数

重构代码,使用lambda 代替filter_seq():

  
 
 
  1. >>> from random import randint 
  2. >>> allnum = [] 
  3. >>> for i in range(9): 
  4. ...     allnum.append(randint(1,100)) 
  5. ...  
  6. >>> allnum       
  7. [75, 15, 98, 98, 64, 71, 55, 27, 70] 
  8. >>> print filter(lambda x:x%2,allnum) 
  9. [75, 15, 71, 55, 27] 

也可以使用列表进行遍历

  
 
 
  1. >>> from random import randint 
  2. >>> allnum = [] 
  3. >>> for i in range(9): 
  4. ...     allnum.append(randint(1,100)) 
  5. ...  
  6. >>> print ([n for n in allnum if n%2]) 
  7. [37, 9, 11, 43, 45, 59] 

使代码更简洁

  
 
 
  1. >>> from random import randint 
  2. >>> print [n for n in [randint(1,100for i in range(9)] if n % 2
  3. [932525891161

map()

map() 函数与filter()很相似,因为他们都是可以处理序列的,map()作用是调用映射,并返回所有值的列表

  
 
 
  1. >>> allnum 
  2. [37911488843456459
  3. >>> map(lambda x:x+2,allnum) 
  4. [391113509045476661

allnum是一个list,利用map 对每个列表的值+2,并且将这个汗水和一个数字的列表返回给map(),这个列表是和原始结果的数字集合.

  
 
 
  1. >>> map(lambda x:x*x*x,range(4)) 
  2. [01827
  3. >>> map(lambda x:x+x,'abcdefg'
  4. ['aa''bb''cc''dd''ee''ff''gg'

map()函数也支持多个seq.例如:

  
 
 
  1. >>> def add(x,y): 
  2. ...     return x + y 
  3. ...  
  4. >>> map(add,range(10),range(10)) 
  5. [024681012141618

reduce()函数使用了一个二元函数,( 函数可以按照给定的方法把输入参数中上序列缩减为单个的值,具体的做法如下:首先从序列中去除头两个元素并把它传递到那个二元函数中去,求出一个值,再把这个加到序列中循环求下一个值,直到最后一个值 )

  
 
 
  1. >>> reduce(lambda x,y:x+y,range(1,4)) 
  2. 6 
  3.  
  4. For example, reduce(lambda x, y: x+y, [12345]) calculates ((((1+2)+3)+4)+5

 

 

本文出自 “奋斗的小子” 博客,请务必保留此出处http://crazyming.blog.51cto.com/1048571/975442