本站所有资源来源于网络。资源只是供大家单机研究学习之用如因商用或其他原因引起一切纠纷和本人与论坛无关,后果自负!

概述

列表生成式是Python内置的非常简单却强大的可以用来创建list的生成式。

Python 列表推导式是什么

列表推导式是 Python 语言特有的一种语法结构,也可以看成是 Python 中一种独特的数据处理方式,
它在 Python 中用于 转换 和 过滤 数据。

其语法格式如下所示,其中 [if 条件表达式] 可省略。

变量 = [表达式 for 迭代变量 in 可迭代对象 [if 条件表达式]]
variable = [out_exp for var in iterable if condition]

下面通过例题来对列表生成式进行深入的理解。

例题1:生成一个由1-10的平方组成的列表

列表元素分别为[1×1,2×2,3×3,……n×n],假设n=10

常规方法

 复制代码 隐藏代码
alist = [] for i in range(1, 11):     alist.append(i * i) print(alist) # [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

列表生成式

 复制代码 隐藏代码
alist = [i * i for i in range(1, 11)] print(alist) # [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

例题2:接着上一个需求,要求返回的序列中不存在偶数项

常规方法

 复制代码 隐藏代码
alist = [] for i in range(1, 11):     if i % 2 != 0:         alist.append(i * i) print(alist) # [1, 9, 25, 49, 81]

列表生成式

 复制代码 隐藏代码
alist = [i * i for i in range(1, 11) if i % 2 != 0] print(alist) # [1, 9, 25, 49, 81]

例题3:字符串s1=’ABC’,字符串s2=’123’,要求:生成序列 A1 A2 A3 B1 B2 B3 C1 C2 C3

常规方法

 复制代码 隐藏代码
alist = [] for i in 'ABC':     for j in '123':         alist.append(i + j) print(alist) # ['A1', 'A2', 'A3', 'B1', 'B2', 'B3', 'C1', 'C2', 'C3']

列表生成式

 复制代码 隐藏代码
alist = [i + j for i in 'ABC' for j in '123'] print(alist) # ['A1', 'A2', 'A3', 'B1', 'B2', 'B3', 'C1', 'C2', 'C3']

例题4:将3×3的矩阵alist1转换成一个列表,且使该列表中包含偶数

常规方法

 复制代码 隐藏代码
alist1 = [[1,2,3],[4,5,6],[7,8,9]] alist2 = [] for item1 in alist1:     for item2 in item1:         if item2 % 2 == 0:             alist2.append(item2) print(alist2) # [2, 4, 6, 8]

列表生成式

 复制代码 隐藏代码
alist1 = [[1,2,3],[4,5,6],[7,8,9]] alist2 = [item2 for item1 in alist1 for item2 in item1 if item2 % 2 == 0] print(alist2) # [2, 4, 6, 8]

例题5:if else 的情况

常规方法

 复制代码 隐藏代码
alist = [] for i in range(10):     if i % 2 == 0:         alist.append(i)     else:         alist.append(1) print(alist) # [0, 1, 2, 1, 4, 1, 6, 1, 8, 1]

列表生成式

 复制代码 隐藏代码
alist = [i if i % 2 == 0 else 1 for i in range(10)] print(alist) # [0, 1, 2, 1, 4, 1, 6, 1, 8, 1]

例题6:当我们想要得到需要循环才能实现的内容时:输出1-10的各个数的对应次方的值。1的1次方,2的2次方,3的3次方…

常规方法

 复制代码 隐藏代码
for i in range(1, 10):     print(i ** i)     # 1     # 4     # 27     # 256     # 3125     # 46656     # 823543     # 16777216     # 387420489

列表生成式

 复制代码 隐藏代码
print([i ** i for i in range(1, 10)]) # [1, 4, 27, 256, 3125, 46656, 823543, 16777216, 387420489]

例题7:找出1-10之间所有的偶数,并返回一个列表(包含以这个偶数为半径的圆的面积)

常规方法

 复制代码 隐藏代码
import math li = [] for i in range(1, 10):     if i % 2 == 0:         li.append(math.pi * i * i) print(li) # [12.566370614359172, 50.26548245743669, 113.09733552923255, 201.06192982974676]

列表生成式

 复制代码 隐藏代码
import math print([math.pi * i * i for i in range(1, 10) if i % 2 == 0]) # [12.566370614359172, 50.26548245743669, 113.09733552923255, 201.06192982974676]

例题8:现在有一个字典d = {‘手机’: 2000, ‘电脑’: ‘4000’, ‘鼠标’: ‘100’ },如何 以 手机=2000,电脑=4000,鼠标=100的形式展示。

常规方法

 复制代码 隐藏代码
d = {'手机': 2000, '电脑': '4000', '鼠标': '100'} li = [] for k, v in d.items():     li.append(k + "=" + str(v)) print(li) # ['手机=2000', '电脑=4000', '鼠标=100']

列表生成式

 复制代码 隐藏代码
d = {'手机': 2000, '电脑': '4000', '鼠标': '100'} print([k + "=" + str(v) for k, v in d.items()]) # ['手机=2000', '电脑=4000', '鼠标=100']

例题9:取出所有带a的列表

常规方法

 复制代码 隐藏代码
list1 = ['52pojie', 'OVVO', 'asd', 'sdf', 'freg', 'sfag', 'refv', 'aser', 'sdfr'] rs_list = [] for s in list1:     if 'a' in s:         rs_list.append(s) print(rs_list) # ['asd', 'sfag', 'aser']

列表生成式

 复制代码 隐藏代码
list1 = ['52pojie', 'OVVO', 'asd', 'sdf', 'freg', 'sfag', 'refv', 'aser', 'sdfr'] list2 = [x for x in list1 if 'a' in x] print(list2) # ['asd', 'sfag', 'aser']

例题10:多重循环

常规方法

 复制代码 隐藏代码
k = [] for i in range(4):     for j in range(2):         k.append((i, j)) print(k) # [(0, 0), (0, 1), (1, 0), (1, 1), (2, 0), (2, 1), (3, 0), (3, 1)]

列表生成式

 复制代码 隐藏代码
print([(i, j) for i in range(4) for j in range(2)]) # [(0, 0), (0, 1), (1, 0), (1, 1), (2, 0), (2, 1), (3, 0), (3, 1)]

例题11:求a~d能组成的所有两字符的字符串

常规方法

 复制代码 隐藏代码
li = [] for x in range(97, 101):     for y in range(97, 101):         li.append(chr(x) + chr(y)) print(li) # ['aa', 'ab', 'ac', 'ad', 'ba', 'bb', 'bc', 'bd', 'ca', 'cb', 'cc', 'cd', 'da', 'db', 'dc', 'dd']

列表生成式

 复制代码 隐藏代码
result = [chr(x) + chr(y) for x in range(97, 101) for y in range(97, 101)] print(result) # ['aa', 'ab', 'ac', 'ad', 'ba', 'bb', 'bc', 'bd', 'ca', 'cb', 'cc', 'cd', 'da', 'db', 'dc', 'dd']

例题12:列表推导式可以实现矩阵的转置

常规方法

 复制代码 隐藏代码
a = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]] li = [] for i in range(4):     l2 = []     for row in a:         l2.append(row[i])     li.append(l2) print(li) # [[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]

列表生成式

 复制代码 隐藏代码
a = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]] at = [[row[i] for row in a] for i in range(4)] print(at) # [[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]

例题13:【自己动手】画Love组成的心型代码

在这里插入图片描述
好了,通过以上的例子你应该对列表生成式有了大致的了解,请把以下【列表生成式】语法改成【常规方法】并发到评论区

 复制代码 隐藏代码
print('\n'.join([''.join([('OVVO'[(x-y) % len('OVVO')]if ((x*0.05)**2+(y*0.1)**2-1)**3-(x*0.05)**2*(y*0.1)**3 <= 0 else ' ')for x in range(-30, 30)])for y in range(30, -30, -1)]))
本资源仅供爱好者研究使用,请下载后24小时内删除!!!
© 版权声明
评论 共2条

请登录后发表评论

    请登录后查看评论内容