并行遍历zip
在基本运算中,zip会取得一个或多个序列为参数,然后返回元组的列表,将这些序列中的并排的元素配成对——摘自《python学习手册》P354,电子页码387
##zip的用法
a = [1,2,3]
b = [3,4,5]
list(zip(a,b))
输出结果
[(1, 3), (2, 4), (3, 5)]
zip可以像range一样进行迭代:
for (x,y) in zip(a,b):
print(x,y,'--',x+y)
输出结果
1 3 -- 4
2 4 -- 6
3 5 -- 8
如果是多个长度不等的序列进行zip,则会以最短的序列长度为准截断所得到的元组。
zip可以用于构造字典,并且十分方便
#zip用于构造字典
keys = ['a','b','c']
vals = [1,2,3]
D = dict(zip(keys,vals))
输出结果
{'a': 1, 'b': 2, 'c': 3}
lambda表达式
这个表达式创建了一个之后能够调用的函数,但是它返回了一个函数而不是将这个函数赋值给一个变量名,因此也叫匿名函数,常以一种行内进行函数定义的形式使用,或用作推迟执行一些代码。——摘自《python学习手册》P483,电子页码516
形式如下:
lambda arg1,arg2,...,argN : expression using args
- lambda是一个表达式,不是一个语句:可以出现在不允许def出现的地方,可以选择性地赋值给一个变量名,将函数作为结果返回。
- lambda主体是一个单个的表达式,而不是一个代码块:通常功能要比def小,限制程序的嵌套。lambda能实现的def都可以实现,但有时lambda会更简洁,简化代码。
lambda和def实现相同效果:
将结果赋值给一个变量名
def func(x,y):return x + y
f = lambda x,y:x + y
func(2,3),f(2,3)
(5, 5)
此外,lambda也支持函数含默认参数,此处例子略
map映射
map函数会对一个序列对象中的每一个元素应用被传入的函数,并且返回一个包含所有函数调用结果的一个列表——摘自《python学习手册》P489,电子页码522
map的输入函数可以是自定义函数:
a = [1,2,3]
def inc(x):return x + 10
list(map(inc,a))
[11, 12, 13]
也可以是自带函数、多输入:
a = [1,2,3]
b = [3,4,5]
list(map(pow,a,b))
[1, 16, 243]
也常和lambda表达式一起用:
a = [1,2,3]
list(map((lambda x:x+3),a))
[4, 5, 6]