Python语法之列表生成式的13个练习题

概述

列表生成式是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)]))
  • 1
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值