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'>