python之列表生成式

列表生成式即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)])