预备知识
一、Python基础
1、列表推导式与条件赋值 列表推导是(list comprehension)是一种简单的创造列表的方式,常应用于创建新的列表,其中每个元素是应用于另一个序列的每个成员或可迭代的某些操作的结果,或者创建满足特定条件的哪些元素的子序列。例如创建如下一个列表:
L=[]
def my_func(x):
return 2*x
for i in range(5):
L.append(my_func(i))
print(L)
[0, 2, 4, 6, 8]
但是,通过列表推导式,我们也可以写成
[my_func(i) for i in range(5)]
[0, 2, 4, 6, 8]
可以加上条件语句的写法,但是要注意for语句和if语句的顺序,if用来判断是对所有元素还是部分元素进行计算:
vec=[1,3,-3,5,6]
[my_func(i) for i in vec if i>0]
[2, 6, 10, 12]
[(x,y) for x in [1,2,3] for y in [3,4,5] if x!=y]
[(1, 3), (1, 4), (1, 5), (2, 3), (2, 4), (2, 5), (3, 4), (3, 5)]
另一个点是嵌套列表推导式,列表推导式中的初始表达式可以是任何表达,甚至可以是另一个列表推导式,如下对矩阵进行转置:
matrix=[[1,2,3,4],[5,6,7,8],[9,10,11,12]]
[[row[i] for row in matrix] for i in range(4)]
[[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]
条件赋值
带有if选择的赋值,其形式为
value=a if condition else b
val='cat'if 2>1 else 'dog'
print(val)
cat
2、匿名函数与map方法
匿名函数
有一些函数有清晰简单的映射关系,又无需在多处场合进行调用,这时候可以用匿名函数的方法简洁的表示,匿名函数用关键字lambda表示。
lambda x:2*x
[(lambda x:2*x)(i) for i in range(5)]
[0, 2, 4, 6, 8]
map函数: map()会根据提供的函数对指定序列做映射,map函数语法:
map(function,iterable,...)
function是映射方法,iterable是序列
由于python3的map()函数返回的是迭代器,所以要用list进行转换
m=map