列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式。
列表生成式的结构是在一个中括号里包含一个表达式,然后是一个for语句,然后是0个或多个for或者if语句。列表表达式可以是任意的,意思是你可以在列表中放入任意类型的对象。返回结果将是一个新的列表,在这个以if和for语句为上下文的表达式运行完成之后产生
格式:
variable = [out_exp for out_exp in input_list if out_exp == 2]
练习:
1. 生成一个列表,列表元素分别为 [1*1,2*2,3*3……n*n],假设n = 10。
一般方法:
list1 = [] for i in range(1,11): list1.append(i*i)
列表生成式:
list1 = [i*i for i in range(1,11)]
2.接着上一个需求,要求返回的序列中不存在偶数项:
一般方法:
list = [] for i in range(1,11): if (i*i) % 2 !=0: list.append(i*i)
列表生成式:
list2 = [i*i for i in range(1,11) if (i*i) %2 !=0 ]
3. 字符串s1 ='ABC',字符串 s2 = '123',要求:生成序列 A1 A2 A3 B1 B2 B3 C1 C2 C3
一般方法:
s1='abc'
s2='123'
list = [] for i in s1: for o in s2: list.append(i+o) print(list)
列表生成式:
s1='abc'
s2='123'
list2 = [i+o for i in s1 for o in s2]
4. 将3x3的矩阵li1转化成一个数组(列表),且使该数组中仅仅包含偶数:
一般方法:
list = [[1,2,3],[4,5,6],[7,8,9]] list2 = [] for b in list: for a in b: if a % 2 == 0: list2.append(a)
列表生成式:
list = [[1,2,3],[4,5,6],[7,8,9]] list2 = [a for b in list for a in b if a %2 ==0] print(list2)
5. 找出1-10之间所有的偶数,并且返回一个列表(这个列表中含以这个偶数为半径的圆的面积)
方法一:使用列表生成式,计算圆的面积要用到圆周率参数,需要导入math模块:
import math print([math.pi *r *r] for r in range(2,11,2))
方法二: 定义一个求圆面积的函数,然后在列表生成式中直接调用函数,从而求出序列中符合条件的半径的面积:
import math def sour(r): res = math.pi*r*r return res print([sour(r)*r*r for r in range(2,11,2)])