学习的原文链接: mp.weixin.qq.com/s?https://m…
一、 map
map函数的基本语法就是map(func, seq),其基本含义值的是:对后面的可迭代序列中的每个元素执行前面的函数func,最终得到一个新的序列;注意:
- Python2 中直接返回的是一个列表
- Python3 中返回的是一个可迭代器,如果想返回列表,可以使用list()进行处理
1.2 demo
- 使用Python内置函数
map(abs, [1,2,3,4])
Out[3]: <map at 0x1c8f0367f40>
list(map(abs, [1,2,3,4]))
Out[4]: [1, 2, 3, 4]
- 使用自定义函数
def mapfunc(x): return x*x # 返回平方和
...: list(map(mapfunc, [1,2,3,4]))
Out[7]: [1, 4, 9, 16]
- 使用匿名函数lambda, 使用匿名函数的时候可以有多个参数
list(map(lambda x: x*x, [1,2,3,4])) # 匿名函数lambda
Out[8]: [1, 4, 9, 16]
list(map(lambda x,y: x+y, [1,2,3,4], [1,2,3,4])) # 匿名函数lambda,多参数形式
Out[9]: [2, 4, 6, 8]
二、 reduce
reduce循环从序列中取出值, 调用函数进行计算,并用上一次的计算结果作为参数和下一个取出的值再次进行计算.
2.2 简单使用
from functools import reduce
print(reduce(lambda x, y: x + y, [1,2,3,4,5]))
2.3 带有初始值initial的reduce
初始化值和序列中的第一个值执行func函数,将得到的结果作为下次的起始值
三、 filter
3.1 语法
filter()函数用于过滤序列,过滤掉不符合条件的那些元素,返回符合条件的元素组成新列表。 序列中的每个元素作为参数传递给函数进行判断,返回True或者False,最后将返回True的元素放到新列表中。
filter()语法如下:
filter(function, iterable) # 前者为函数,后者为待执行的序列
3.2 简单使用 (其他用法同上)
list(filter(lambda x: x%2==0, [1,2,3,4,5])) # 过滤出偶数
[2, 4]
四、 sorted/sort
4.1 语法
sorted(iterable, key=None, reverse=False)
4.2 可以接受的三个参数
sorted()接受3个参数,返回的是一个排序后的列表
- 可迭代对象iterable
- reverse=False,接受一个布尔值,选择是否反转排序结果,默认是False
- 接受一个回调函数key=None,key参数的作用是我们自定义一个函数,然后通过将序列中的元素作用于函数之后再进行排序
4.3 demo演示
sorted([12,-3,4,5-6],key=lambda x:abs(x), reverse=True) # 排序,反转-逆序
Out[4]: [12, 4, -3, -1]
sorted([12,-3,4,5-6],key=lambda x:abs(x), reverse=False) # 排序, 默认升序
Out[5]: [-1, -3, 4, 12]
4.6 对比sort()
sort()方法只能对原列表list进行排序,参数和sorted是相同的;
sort()是将原来的列表直接原地修改,而sorted是生成新的列表,二者是不同的。
五、 zip
5.0 源码注释
5.1 zip语法
zip([iterable,...]) # iterable是一个或者多个可迭代器
- zip函数执行的返回结果在python3中返回的是一个zip对象,如果需要列表的形式,直接使用list方法展开;展开后的结果是列表中嵌套元组的形式。
5.2 zip中可以接受列表、元组、字符串等形式
zip([1,2,3],['a','b','c'])
Out[6]: <zip at 0x1eac22889c0> # 直接返回的是zip对象
list(zip([1,2,3],['a','b','c']))
Out[7]: [(1, 'a'), (2, 'b'), (3, 'c')] # 返回三个元组,每个元组的第i个元素来自第i个zip迭代的对象
5.3 zip(*iterables) 其实就是 unzip 的过程
我们一般认为该方法是zip的反过程,是一个unzip的过程:
zip_obj = list(zip([1,2,3],['a','b','c']))
zip(*zip_obj)
Out[11]: <zip at 0x1eac228dbc0>
list(zip(*zip_obj))
Out[12]: [(1, 2, 3), ('a', 'b', 'c')]
5.4 zip的其他使用
- 一次遍历dataFrame中的多列
- 也可以直接来构造字典
dict(zip([0,1,2], ['a','b','c']))
Out[14]: {0: 'a', 1: 'b', 2: 'c'}