1. 匿名函数
在python中,我们使用 lambda 来创建匿名函数。匿名函数一般为一个表达式,函数体比较简单。它的特点如下所示:
- lambda的主体是一个表达式,函数体比较简单,一般只有一个语句,而不是一个代码块。
- lambda函数拥有自己的命名空间。
- lambda的语法非常简单:即lambda 变量:执行的语句(并将语句执行的结果返回)
例如:
f=lambda i,j :i*i+j*j
print(f(3,4)) 结果如下:
25
2. 筛选——filter函数
filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回一个迭代器对象(针对python3.x的版本),如果要将迭代器对象转换为列表,可以使用 list() 来转换。
filter() 函数该接收两个参数,第一个为筛选的标准(一般为函数),第二个为筛选的序列,序列中的每个元素作为参数传递给函数进行判断,返回值为 True 或 False(逻辑值),最后将返回 True 的元素放到新列表中,筛选出符合标准的元素。
例如:result中存放的是4个元组,每个元组中的信息可以理解为是火车票的车次,剩余票等。
#筛选filter
#result 为要筛选的序列
result=[('G111','2',''),('D111','2',''),('T111','','8'),('K111','','3')]
#拿什么标准去筛选,筛选什么,返回值为真或假(逻辑值)
def f1(i):return i[0][0] in "GD"
print(filter(f1,result)) #返回为一个迭代器对象
print(list(filter(f1,result))) #以列表形式显示筛选后的结果结果如下:
<filter object at 0x00000000025DB3C8>
[('G111', '2', ''), ('D111', '2', '')]
如上例子,由于函数体比较简单,我们可以使用匿名函数来完成功能,将filter函数和lambda函数结合起来使用。
result=[('G111','2',''),('D111','2',''),('T111','','8'),('K111','','3')]
print(list(filter(lambda i: i[0][0] in "GD",result)))
print(list(filter(lambda i: i[0][0] not in "GD",result)))结果如下:
[('G111', '2', ''), ('D111', '2', '')]
[('T111', '', '8'), ('K111', '', '3')]
3. map 函数
- map函数与filter函数一样,在python2和python3中稍有不同,python2直接返回一个列表,python3则返回一个可迭代对象。
- map() 函数的语法: map(function, iterable)。即:map(操作,操作对象)
- 其中, function 将参数序列中的每一个元素都执行 function 函数的操作,返回一个新列表。
例如:
a=[5,6,7,8,9,10]
print(map(lambda i:i+10,a)) #返回一个迭代器
print(list(map(lambda i:i+10,a))) #加上list()返回列表结果如下:
<map object at 0x00000000022DB240>
[15, 16, 17, 18, 19, 20]
在下面这个例子中,将filter函数,lambda函数和map函数结合起来使用,打印出每一项的结果。
带上list,直接执行,打印
result=[('G111','2',''),('D111','2',''),('T111','','8'),('K111','','3')]
list(map(print,filter(lambda i: i[0][0] in "GD",result)))
list(map(print,filter(lambda i: i[0][0] not in "GD",result)))结果如下:
('G111', '2', '')
('D111', '2', '')
('T111', '', '8')
('K111', '', '3')
4. reduce 函数
- reduce() 函数会对参数序列中的元素进行累积,也即递归操作。
- reduce() 函数的语法:reduce(函数(有两个参数), 可迭代的对象)
- reduce() 函数的返回值为:函数计算的结果。
- reduce() 函数在使用时,需要导入 from functools import reduce
例如:对迭代器中的元素进行递归操作,将第 1、2 个元素进行操作,得到的结果再与第三个元素用 function 函数运算,最后得到一个结果。
#reduce 递归
from functools import reduce
#两个参数
print(reduce(lambda i,j:i*j,range(1,10))) #计算列表积:1*2*3*4*5*6*7*8*9
print(reduce(lambda i,j:i+j,range(1,10))) #计算列表和:1+2+3+4+5+6+7+8+9
print(reduce(lambda i,j:i+j,[1,2,3,4,5,6,7,8,9])) #计算列表和:1+2+3+4+5+6+7+8+9结果如下:
362880
45
45
5. sorted 函数
- sorted() 函数对所有可迭代的对象进行排序操作。与列表中的sort方法不同。
- sort 与 sorted 区别:sort 是应用在列表上的方法,而sorted 是对可迭代的对象进行排序操作。
sorted 函数的语法: sorted( iterable, key, reverse) 其中:
- iterable -- 可迭代对象。
- key -- 主要是用来进行比较的依据(按照什么进行排序)。
- reverse -- 排序规则,reverse = True 降序 , reverse = False 升序(默认)。
例如:结果为返回重新排列的列表
#排序,默认从小到大
print(sorted([1,-2,3,-4,9]))
print(sorted([1,-2,3,-4,9,-1.5],key=abs)) #按照绝对值排序
print(sorted([1,-2,3,-4,9,-1.5],key=lambda i:i%2)) #按照与2取余的结果进行排序结果如下:
[-4, -2, 1, 3, 9]
[1, -1.5, -2, 3, -4, 9]
[-2, -4, -1.5, 1, 3, 9]
6. 列表生成式
使用列表生成式,可以使一些简单的步骤一起执行,用在列表中。如下所示:
#列表生成式,用在列表中
print([i+i for i in range(10)])
print([i*i for i in range(10) if i>5])结果如下:
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
[36, 49, 64, 81]