python之六剑客详解

python六剑客分别为lambda,map,reduce,filter,切片,列表推导,其使用特点是简洁,可以用一行代码解决问题;下面分别论述

1.lambda()函数:匿名函数,被用来创建函数对象

语法:

lambda函数的语法只包含一个语句,如:lambda [arg1,arg2,arg3]:expression

代码示例:

#一个参数lambda函数
>>> func=lambda x:x*2
>>> print (func(3))
6

#两个参数lambda函数
>>> func=lambda x,y:x+y
>>> print (func(2,3))
5

2.map()函数:接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并把结果作为新的序列返回

语法:

map(function,iterable)

代码示例:

def mul(letter):
    return letter.lower()

result=map(mul,"ABCD")
"返回的是迭代器对象"
print (result)
"转化为list类型"
print (list(result))

#通常map函数结合lambda函数一起使用,如:
>>> list(map(lambda x:x.upper(),"abc"))
['A', 'B', 'C']

3.reduce()函数:接收的参数和map()类似,一个是函数,一个是序列,但reduce函数必须接收两个参数,先对序列中的第1、2个元素进行操作,得到的结果再与第3个数据用函数运算,最后返回一个结果

语法:

reduce(function,iterable[,initializer])  initializer可选,为初始参数

需要注意的是:python3中取消了全局命名空间中的reduce()函数,将reduced()放到了functools模块中,要使用reduce()的话,要先加载functools

代码示例:

>>> from functools import reduce   
>>> def add(x,y):
...     return x+y
...
>>> reduce(add,(1,2,3,4,5))
15
>>> reduce(add,(1,2,3,4,5),10)   #带初始参数
25

#与lambda函数结合使用,如:
>>> reduce(lambda x,y:x+y,["w","o","r","l","d"])
'world'

4.filter()函数:主要用于过滤掉不符合条件的元素,返回由符合条件元素组成的新列表;同样,也是接收两个参数,一个为函数,一个为序列,序列的每个元素作为参数传递给函数进行判断,返回True和False,最后将返回True的元素放到新列表中

语法:

filter(function,iterable)

代码示例:

#过滤10以内大于5的数字
>>> def greaterFiveFunc(x):
...     if x>5:
...             return x
...
>>> filter(greaterFiveFunc,range(10))     #返回迭代器对象
<filter object at 0x0000025FED95BFD0>
>>> list(filter(greaterFiveFunc,range(10)))
[6, 7, 8, 9]

#与lambda函数结合使用,如:
>>> list(filter(lambda x:x.islower(),"ABcd"))   #过滤出小写字母
['c', 'd']

5.切片:序列类型是其元素被顺序放置的一种数据结构类型,可以通过下标的方式来获得某一个数据元素,或者通过指定下标范围来获得一组序列的元素。这种访问序列的方式叫做切片,调用内置函数slice()函数

坐标位置:

序列的下标从左向右依次为0,1,2...;从右向左依次为-1,-2,-3...

代码示例:

>>> seq=['a', 'b', 'c', 'd', 'e', 'f']
#下标位置
>>> seq[0]
'a'
>>> seq[-1]
'f'
>>> seq[-4]
'c'
#指定范围:左为闭区间,右为开区间
>>> seq[2:4]     
['c', 'd']
>>> seq[-4:-1]
['c', 'd', 'e']
#翻转序列
>>> seq[::-1]     
['f', 'e', 'd', 'c', 'b', 'a']
#步长:每隔2个长度取值
>>> seq[::2]      
['a', 'c', 'e']
>>> seq[-1:-5:-2]
['f', 'd']

6.列表推导:又称为列表解析,是python的一种独有特性,可以把一个序列转换为另一个新列表

代码示例:

#10以内大于等于6的数字
>>> [x for x in range(10) if x>=6]
[6, 7, 8, 9]
#元组中的元素的二次方
>>> [i**2 for i in (2,3,4)]
[4, 9, 16]
#两个序列中的元素分别相加
>>> [ i*j for i in range(4) for j in range(2,4)]
[0, 0, 2, 3, 4, 6, 6, 9]

引申:

1.字典推导

>>> s=["a","b","c"]
>>> {s[i]:i for i in range(len(s))}
{'a': 0, 'b': 1, 'c': 2}

>>> d={'a': 10, 'b': 34}
>>> {key:value for value,key in d.items()}
{10: 'a', 34: 'b'}

2.集合推导

>>> sq={x**2 for x in (1,1,2,2,3)}
>>> sq
{1, 4, 9}
>>> type(sq)
<class 'set'>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值