列表推导式(有的叫列表解析)f() for i in l 在应用时需要用方括号或圆括号括起来,它不是for循环,后面不带冒号(:)。其中l是序列(range()、列表、元组、字典等),i是序列l中的元素,f()是与i有关的函数或表达式。
列表推导式的三个作用如下:
一、建立新列表:
def f(x):
return x*2
l = [i for i in range(6)]
print(l)
li = [i*2 for i in [0,1,2,3,4,5]]
print(li)
lis=[f(i) for i in range(6)]
print(lis)
运行结果:
[0, 1, 2, 3, 4, 5]
[0, 2, 4, 6, 8, 10]
[0, 2, 4, 6, 8, 10]
------------------
(program exited with code: 0)
Press any key to continue . . .
它不但能对列表进行以上操作,对元组、字典也可以进行同样的操作而建立相应的列表。
二·、创建迭代对象:
def f(x):
return x*2
lis=(f(i) for i in range(6)) #注意这里是圆括号!
print(lis)
print(next(lis),end='**')
print(next(lis),end='**')
运行结果:
at 0x0000022148095648>
0**2**
------------------
(program exited with code: 0)
Press any key to continue . . .
三、‘操作矩阵:
def f(x):
return x*2
matrix=[[1,2,3],
[4,5,6],
[7,8,9]]
m=[i[1] for i in matrix] #提取矩阵列元素
ms=[f(i[1]) for i in matrix]
md=[f(matrix[i][i]) for i in [0,1,2]]
print('第二列的元素列表',m)
print('对第二列的元素进行函数f(x)计算:',ms)
print('对对角线的元素进行函数f(x)计算',md)
运行结果:
第二列的元素列表 [2, 5, 8]
对第二列的元素进行函数f(x)计算: [4, 10, 16]
对对角线的元素进行函数f(x)计算 [2, 10, 18]
------------------
(program exited with code: 0)
Press any key to continue . . .
另外,在列表推导式的后面增加if语句进行扩展,例如:
def f(x):
return x*2
matrix=[[1,2,3],
[4,5,6],
[7,8,9]]
md=[f(matrix[i][i]) for i in [0,1,2] if f(matrix[i][i])%3!=0]
print('对对角线的元素进行函数f(x)计算,并列出不被3整除的值:',md)
运行结果:
对对角线的元素进行函数f(x)计算,并列出不被3整除的值: [2, 10]
------------------
(program exited with code: 0)
Press any key to continue . . .