目录
1、lambda函数(匿名函数)
python使用lambda来创建匿名函数。
- lambda函数只是一个表达式,函数体比def简单很多
- lambda语句被用来创建新的函数对象,并且在运行时返回他们。
- lambda会返回一个函数对象,但这个对象不会赋给一个标识符,而def则会把函数对象赋值
给一个 变量(函数名)。
- lambda函数拥有自己的命名空间,且不能访问自有参数列表或者全局命名空间里的参数
- 像if或for或print等语句不能用于lambda中。
示例1:
>>> sum=lambda x,y:x+y
>>> print(sum(10,11))
21
>>> print(sum("hello","world"))
helloworld
>>>
>>>
>>> a=lambda x,y,z:x+y*z
>>> a(1,2,3)
7
>>>
>>> a=lambda:1
>>> a
<function <lambda> at 0x00000227F332B378>
>>> a()
1
>>>
示例2:自定义一个函数和lambda一起使用
>>> def twice(n):
... return lambda s:s*n
...
>>> #该步的作用是t=lambda s:s*n, 且n=2
...
>>> t=twice(2)
>>> #下面是将s传递进去,s为“word”
...
>>> print(t("word"))
wordword
>>>
2、map函数:根据指定序列做映射
map函数会根据指定的序列做映射
语法
map(function,iterable,...)
- function:函数
- iterable:一个或者多个序列
返回值
- Python2中返回列表
- Python3中返回迭代器,如果想生成列表,要list()下。
示例1:用map函数求列表中各个数的二次方
>>> def square_1(x):
... return x**2
...
>>> map(square_1,[1,2,3,4])
<map object at 0x00000227F33322E8>
>>> list(map(square_1,[1,2,3,4]))
[1, 4, 9, 16]
>>>
示例2:用map函数求2个列表中的对应位上的数值相加
>>> res=map(lambda x,y:x+y,[2,3,4],[3,4,5])
>>> print(list(res))
[5, 7, 9]
>>>
示例3:用map函数将字符串中的数字转换为数字类型,其他类型不变。
>>> def get_num(s):
... if s>="0" and s<="9":
... return int(s)
... else:
... return s
...
>>> print(list(map(get_num,"abc123")))
['a', 'b', 'c', 1, 2, 3]
>>>
解释:
map函数是将序列字符串“abc123”中的每个元素都用函数get_num进行判断,所以在get_num只要就是用于判断序列中每个元素需要满足的要求就行。
3、reduce函数:
3.1、自定义函数和reduce配合使用
语法
reduce(function,iterable[,initializer])
- function:函数,有2个参数
- iterable:可迭代对象
- initializer:可选,初始参数
注意事项:
1、在python2中reduce()函数可以直接使用,但是在python3中,reduce()需要引入模块:functools
示例1:
>>> from functools import reduce
>>>
>>> def add(a,b):
... return a+b
...
>>> reduce(add,[3,4,5,6,7])
25
>>>
思路解析:
前两个数值相加:
3+4=7
和7与第三个值相加:
7+5=12
和12和第4个数值相加
12+6=18
和18与第5个值相加
18+7=25
3.2、与lambda函数混合使用
注意事项:
reduce中,函数必须是2个参数,不能是1个,否则会报错。
示例1:
>>> reduce(lambda x:x*2,[1,2,3,4])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: <lambda>() takes 1 positional argument but 2 were given
>>>
示例2:统计某个字符串中某个字符的重复次数。
>>> from functools import reduce
>>> sentence="i am a boy,i have a ball"
>>> print(reduce(lambda a,x:a+x.count("a"),sentence,0))
5
>>>
4、filter函数
filter()函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元组组成的列表。
该函数接受两个参数,第一个为函数,第二个为序列,序列的每个元素传给函数进行判断,返回True和False,最后将True的元素放在列表中。
注意:python3中返回的是迭代器,如果需要,可以转换为列表。
示例1:返回列表中的奇数或者偶数
>>> def is_odd(n):
... if n%2==1:
... return n
...
>>> print(list(filter(is_odd,(1,2,3,4,5,6,7))))
[1, 3, 5, 7]
>>> print(list(filter(lambda x:x%2==0,(2,3,4,5,6,7,8,9,10))))
[2, 4, 6, 8, 10]
>>>
5、推导列表
列表推导式提供了一种简明扼要的方法来创建列表。
习题1:使用列表推导式实现嵌套列表的平铺。
>>> s=[[1,2,3],[4,5,6],[7,8,9]]
>>> print([k for i in s for k in i])
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>>
习题2:使用推导列表过滤掉不符合条件的元素
>>> m
[0, 2, 3, 4, -1, -4, -2, -5, 9]
>>> print([num for num in m if num>0] )
[2, 3, 4, 9]
>>>
习题3:在列表推导式中使用多个循环,实现多序列元素任意组合
>>> [(x,y) for x in range(5) for y in range(10) if y>4]
[(0, 5), (0, 6), (0, 7), (0, 8), (0, 9), (1, 5), (1, 6), (1, 7), (1, 8), (1, 9), (2, 5), (2, 6), (2, 7), (2, 8), (2, 9), (3, 5), (3, 6), (3, 7), (3, 8), (3, 9), (4, 5), (4, 6), (4, 7), (4, 8), (4, 9)]
>>>
习题4、使用推导列表列出100以内的所有的素数。
>>> import math
>>> math.sqrt(100)
10.0
>>> [n for n in range(2,100) if 0 not in [n%d for d in range(2,int(math.sqrt(n))+1)]]
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
>>>
6、切片
python中的有序序列都可以进行切片操作,例如:列表、元组、字符串
语法:
序列[start:end:step]
- start:起始索引,从0开始,-1结束
- end:结束索引
- step:步长
- end-start:当为正数时,从左向右取值,当为负数时,反向取值。
- 切片结果不包含结束索引,不包含最后一位。
-
>>> list1=[1,2,3,4,5,6,7] >>> list2=list1[:] >>> list2 [1, 2, 3, 4, 5, 6, 7] >>> list3=list1[::1] >>> list3 [1, 2, 3, 4, 5, 6, 7] >>> list4=list1[2:6:2] >>> list4 [3, 5] >>> list5=list1[:-1:1] >>> list5 [1, 2, 3, 4, 5, 6] >>> list6=list1[-4:-1:2] >>> list6 [4, 6] >>> list7=list1[-1:0:1] >>> list7 [] >>> list8=list1[-1:0:-1] >>> list8 [7, 6, 5, 4, 3, 2] >>>