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]