Python:【列表】 列表生成式
一、列表生成式
- 运用列表生成式,可以写出非常简洁的代码。一般情况下循环太繁琐,而列表生成式则可以用一行语句代替多行循环生成列表。
- 格式: [ expression(i) for i in 序列 if …] == 表达式+循环+条件
二、常见应用
1.使用表达式
①生成一个列表,列表元素为[11,22,...,9**9]
#普通表达式
>>>nums=[i**i for i in range(1,10)]
[1, 4, 27, 256, 3125, 46656, 823543, 16777216, 387420489]
②找出1~10之间的所有偶数.并且返回一个列表(包含以这个偶数为半径的圆的面积)
>>>areas=[math.pi*r*r for r in range(2,11,2)]
[12.566370614359172, 50.26548245743669, 113.09733552923255, 201.06192982974676, 314.1592653589793]
#表达式也可以是函数
>>>def square(r):
>>> retrn math.pi*r*r
>>>areas=[square(r) for r in range(2,11,2)]
[12.566370614359172, 50.26548245743669, 113.09733552923255, 201.06192982974676, 314.1592653589793]
③S1=‘ABC’ S2=‘123’ 返回 S= [A1 A2 A3…]
#可有多重for循环
>>>S1,S2="ABC","123"
>>>S=[i+j for i in S1 for j in S2]
['A1', 'A2', 'A3', 'B1', 'B2', 'B3', 'C1', 'C2', 'C3']
#若返回[A1,B2,C3],则使用zip()
>>>S=[x+y for x,y in zip(S1,S2)]
['A1', 'B2', 'C3']
④取二维列表中每一行的第2列元素构成一个列表
>>>nums=[[1,2,3],[4,5,6],[7,8,9]]
>>>res=[a[1] for a in nums]
[2,5,8]
2.使用if条件
①找出1~10之间的所有偶数
>>>nums=[num for num in range(1,11) if num%2==0]
[2,4,6,8,10]
②找出1~100之间的所有素数
#条件也可以是函数
>>>def isPrime(num):
>>> for i in range(2,num):
>>> if num%i==0:
>>> return False
>>> return True
>>>nums=[num for num in range(1,101) if isPrime(num)]
[1, 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
3.表达式+条件判断
①半径在2~10,面积小于50的圆面积
>>>areas=[math.pi*r*r for r in range(2,11) if math.pi*r*r<50]
[12.566370614359172, 28.274333882308138]
4.二维数组
①初始化
#初始化一个三行两列的二维数组
>>>lis=[[0 for _ in range(2)] for _ in range(3)]
[[0, 0], [0, 0], [0, 0]]
②翻转
将3X4的矩阵列表转换为4X3列表:
>>> 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]]