lambda filter map reduce apply zip all sort sorted
1. lambda 匿名函数
lambda para: func(para)
lambda 函数是一个可以接收任意多个参数(包括可选参数)并且返回单个表达式值的函数
1.lambda函数比较轻便,即用即仍,很适合需要完成一项功能,但是此功能只在此一处使用,连名字都很随意的情况下
2.匿名函数,一般用来给filter,map这样的函数式编程服务
3.作为回调函数,传递给某些应用,比如消息处理
2. filter()
功能:
过滤掉序列中不符合函数条件的元素,当序列中要删除的元素可以用某些函数描述时,就可以使用filter函数。返回一个迭代器
类似一个for循环,但它是一个内置函数,并且更快
filter(func,seq).func
可以是匿名函数或者自定义函数,他会被后面的seq的每个元素判定是否符合函数条件,返回True False 只留下True的元素。
seq = range(1, 10)print(type(seq)) # <class 'range'>res = filter(lambda x: x % 2 == 0, seq)print(type(res)) # <class 'filter'>print(res) # <filter object at 0x0000022015652FD0>print(list(res)) # [2, 4, 6, 8]l = [i for i in res] # [2, 4, 6, 8]
逻辑实现
def filter(func,seq):
f_seq = [] # 建一个空序列,用于存储过滤后的元素
for item in seq: # 对序列中的每个元素进行迭代
if func(item): # 如果为真的话
f_seq.append(item) # 满足条件者,则加入
return f_seq # 返回过滤后的元素
3. map()
功能:
求一个序列或者多个序列进行函数映射之后的值。返回的是迭代器。需要同filter一样就行list转换。
map(func,iterable1,iterable2)
func有几个参数,iterable就有几个,按iterable中最短的序列计算。
i1 = [_ for _ in range(1, 10)]
i2 = [_ for _ in range(10, 0,-1)]
i3 = [0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1]
res = map(lambda x, y, z: x - y + z, i1, i2, i3)
print(res) # <map object at 0x00000284AC7B7940>
print(type(res)) # <class 'map'>
print(list(res)) # [-8.9, -6.9, -4.9, -2.9, -0.9, 1.1, 3.1]
map(list, i)
4. reduce()
描述
reduce() 函数会对参数序列中元素进行累积。
函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果。
语法
reduce() 函数语法:
reduce(function, iterable[, initializer])
参数
>>>def add(x, y) : # 两数相加
... return x + y
...
>>> reduce(add, [1,2,3,4,5]) # 计算列表和:1+2+3+4+5
15
>>> reduce(lambda x, y: x+y, [1,2,3,4,5]) # 使用 lambda 匿名函数
15
i2 = [1 for _ in range(10, 0,-1)]
from functools import reduce
res = reduce(lambda x,y: x+y,i2)
print(res) # 10
print(type(res)) # <class 'int'>
res = reduce(lambda res, c: res * 10 + eval(f'{c}*1'), '123', 0)
>>> 123
计算过程
先计算res = i2[0]+i2[1]
res = res + i2[2]
res = res + i2[3]
…
res = res + i2[9]
5. apply
功能pandas 内置
对象为DataFrame 或者Series。一是直接对DataFrame或者Series应用函数,二是对pandas中的groupby之后的聚合对象apply函数
apply(func, axis)
import numpy as np
import pandas as pd
a = np.random.randint(low=0, high=4, size=(2, 4))
data = pd.DataFrame(a)
print(data)
data = data.apply(lambda x: x*10)
print(data)
'''
0 1 2 3
0 0 1 0 3
1 2 3 0 2
0 1 2 3
0 0 10 0 30
1 20 30 0 20
''''
6. zip()
功能
zip()是Python的一个内建函数,它接受一系列可迭代的对象作为参数,将对象中对应的元素打包成一个个tuple(元组),然后返回由这些tuples组成的list(列表)。若传入参数的长度不等,则返回list的长度等于参数中长度最短的对象的长度
zip([iterable,…]) zip( * zipped)
print([_ for _ in zipped]) # [(0, 0), (1, 1), (2, 2), (3, 3), (4, 4)]
a,b = zip(*zip(range(5), range(6,10)))
>>>(0, 1, 2, 3)
>>>(6, 7, 8, 9)
res = zip(*[(0,1),(1,2),(2,3),(3,4)])
for i in res:
print(list(i))
>>> [0, 1, 2, 3]
>>> [1, 2, 3, 4]
7. all()
功能
用于判断给定的可迭代参数中所有元素是否为True。
元素除了0、None、False、空外,都是True。
等价于
def all(iterable):
for elem in iterable:
if not elem:
return False
return True
all(iterable)
如果iterable的所有元素不为0、’’、False或者iterable为空,all(iterable)返回True,否则返回False;
>>> all(['a', 'b', 'c', 'd']) # 列表list,元素都不为空或0
True
>>> all(['a', 'b', '', 'd']) # 列表list,存在一个为空的元素
False
>>> all([0, 1,2, 3]) # 列表list,存在一个为0的元素
False
>>> all(('a', 'b', 'c', 'd')) # 元组tuple,元素都不为空或0
True
>>> all(('a', 'b', '', 'd')) # 元组tuple,存在一个为空的元素
False
>>> all((0, 1, 2, 3)) # 元组tuple,存在一个为0的元素
False
>>> all([]) # 空列表
True
>>> all(()) # 空元组
True
8. sort()和sorted()
sort()描述
sort() 函数用于对原列表进行排序,如果指定参数,则使用比较函数指定的比较函数。
语法
sort() 方法语法:
list.sort( key=None, reverse=False)
参数
- key — 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
- reverse — 排序规则,reverse = True 降序, reverse = False 升序(默认)。
返回值
该方法没有返回值,但是会对列表的对象进行排序。sorted()描述
sorted() 函数对所有可迭代的对象进行排序操作。sort 与 sorted 区别: sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。 list 的 sort 方法返回的是对已经存在的列表进行操作,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。
语法
sorted 语法:
sorted(iterable, key=None, reverse=False)
参数说明:
- iterable — 可迭代对象。
- key — 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
- reverse — 排序规则,reverse = True 降序 , reverse = False 升序(默认)。
返回值
返回重新排序的列表。 ```python alist = [{“name”: “a”, “age”: 20}, {
alist.sort(key=lambda it: it[‘age’], reverse=True)"name": "b", "age": 30}, {"name": "c", "age": 25}][{‘name’: ‘b’, ‘age’: 30}, {‘name’: ‘c’, ‘age’: 25}, {‘name’: ‘a’, ‘age’: 20}]
alist = sorted(alist, key=lambda it: it[‘age’]) [{‘name’: ‘a’, ‘age’: 20}, {‘name’: ‘c’, ‘age’: 25}, {‘name’: ‘b’, ‘age’: 30}]
```
