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]]
posted @ 2021-10-25 10:22  ZghzzZyu  阅读(152)  评论(0编辑  收藏  举报