通常我们生成一个列表:
def fun(x):
return x ** 2
l = []
for i in range(5):
l.append(fun(i))
实际上可以通过列表推导式来进行简化:[* for i in *]
[fun(i) for i in range(5)]
同时,列表推导式还支持多层嵌套:
In: [m + '_' + n for m in ['a','b'] for n in ['v','e']]
Out:['a_v', 'a_e', 'b_v', 'b_e']
举一个例子,截断列表中超过5的元素,即超过5的用5代替,小于5的保留原来的值:
In: L = [1, 2, 3, 4, 5, 6, 7]
[i if i <= 5 else 5 for i in L]
Out: [1, 2, 3, 4, 5, 5, 5]
函数的定义一般具有清晰的映射关系,我们可以用匿名函数的方式进行简洁的表示
fun = lambda x : x ** 2
但显然我们违背了“匿名” 的 含义,许多场合我们无需多处调用一个函数,所以我们往往不会关心函数的名字,只关心函数的映射关系。
(lambda x: x ** 2)(8)
[(lambda x: x ** 2)(i) for i in range(5)]
而上述关于列表推导式的匿名函数映射,我们通过map函数来实现。map返回一个map对象,需要通过list转化为列表
list(map(lambda x, y:str(x)+"_"+y,range(5),list('abcde')))
l1 = ('avd')
l2 = ('efsf')
list(zip(l1,l2))
[('a', 'e'), ('v', 'f'), ('d', 's')]
for i,v in zip(range(len(l)),l):
print(i,' ',v,)
0 a
1 v
2 r
3 d
l = list('avrd')
for i, v in enumerate(l):
print(i,v)
0 a
1 v
2 r
3 d