python学习笔记之--python六剑客

python六剑客:filter过滤器、map映射函数、lambda匿名函数、reduce累加、切片、推导列表
 
filter

filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回一个迭代器对象,如果要转换为列表,可以使用 list() 来转换。

该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。

>>> list(filter(lambda x:x%2,[1,2,3,4]))
[1, 3]
>>> list(filter(lambda x:x>='A' and x <='Z',"AaBbCc"))
['A', 'B', 'C']
栗子:
>>> def is_odd(n):
...     return n%2==1
...
>>> tmplist = filter(is_odd,[1,2,3,4,5,6,7,8,9,10])
>>> newlist = list(tmplist)
>>> print(newlist)
[1, 3, 5, 7, 9]
 
map

map() 会根据提供的函数对指定序列做映射。

第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。

map(function,iterable,...)
function:函数
iterable:一个或多个序列
例1:
>>> list(map(lambda x:str(x)+"*",[1,2,3,4]))
['1*', '2*', '3*', '4*']
例2:
>>> list(map(lambda x:x ** 2,[1,2,3,4]))   #使用lambda匿名函数
[1, 4, 9, 16]
例3:
>>> def square(x):
...     return x**2
...
>>> map(square,[1,2,3,4])    #py3map返回迭代器
<map object at 0x000001199BF08A90>
>>> list(map(square,[1,2,3,4]))
[1, 4, 9, 16]
例4:
>>> map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10])
<map object at 0x000001199BF08A58>
>>> list(map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10]))
[3, 7, 11, 15, 19]

lambda匿名函数

所谓匿名,意即不再使用 def 语句这样标准的形式定义一个函数。

lambda 只是一个表达式,函数体比 def 简单很多。
lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。 

语法:lambda [arg1 [,arg2,.....argn]]:expression

lambda语句中,冒号前是参数,可以有多个,用逗号隔开,冒号右边的返回值

>>> def func(x):
...     return x**2
...
>>> print(func(4))
16
#上面函数例子用lambda实现:
>>> g = lambda x:x**2
>>> print(g(4))
16

#混合使用栗子:
>>> filter(lambda x:True if x>0 else False,[1,2,-1,-2])
<filter object at 0x0000000003F54D68>
>>> list(filter(lambda x:True if x>0 else False,[1,2,-1,-2]))
[1, 2]

reduce

reduce() 函数会对参数序列中元素进行累积。

函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果。

 语法:reduce(function, iterable[, initializer])

function -- 函数,有两个参数
iterable -- 可迭代对象
initializer -- 可选,初始参数

>>> from functools import reduce
>>> def add(x,y):
...     return x+y
...
>>> reduce(add,[1,2,3,4])
10
#相当于:
>>> reduce(lambda x,y:x+y,[1,2,3,4])
10
 切片
>>> s=[1,4,7,9,10]
>>> s[:]
[1, 4, 7, 9, 10]
>>> s[::-1]
[10, 9, 7, 4, 1]
 
推导列表

列表推导式提供了从序列创建列表的简单途径。通常应用程序将一些操作应用于某个序列的每个元素,用其获得的结果作为生成新列表的元素,或者根据确定的判定条件创建子序列。

每个列表推导式都在 for 之后跟一个表达式,然后有零到多个 for 或 if 子句。返回结果是一个根据表达从其后的 for 和 if 上下文环境中生成出来的列表。如果希望表达式推导出一个元组,就必须使用括号。

>>> [x+1 for x in range(1,10,2)]
[2, 4, 6, 8, 10]

>>> [x*y for x in range(1,10,2) for y in range(3)]
[0, 1, 2, 0, 3, 6, 0, 5, 10, 0, 7, 14, 0, 9, 18]

列表推导式可以使用复杂表达式或嵌套函数:
>>> [str(round(355/113,i)) for i in range(1,6)]
['3.1', '3.14', '3.142', '3.1416', '3.14159']

集合也支持推导式:
>>> a = {x for x in 'abracadabra' if x not in 'abc'}
>>> a
{'r', 'd'}
字典推导可以用来创建任意键和值的表达式词典
>>> {x: x**2 for x in (2, 4, 6)} {2: 4, 4: 16, 6: 36}
 

 

原文地址:https://www.cnblogs.com/wenm1128/p/11615693.html