Python搬砖之旅(10th day):列表推导式专题

Python搬砖之旅(10th day):列表推导式专题

列表推导式常用来获取特定规则的列表,可以快速简洁地生成列表,并提升代码效率,学会写列表推导式是学习Python的重要内容之一。
参考链接:http://mooc1.xueyinonline.com/nodedetailcontroller/visitnodedetail?courseId=216394634&knowledgeId=392752403

第一章 列表推导式的常规结构

列表推导式的常规结构是 : [计算方式 取值方式 筛选条件] , 其中筛选条件是可选的。
案例1:实现将列表lst中每一个元素进行平方后放入到一个新列表中。

lst = [1, 2, 3, 4]
# 实现将列表lst中每一个元素进行平方后放入到一个新列表中
new_lst = []
for i in lst:
    num = i*i
    new_lst.append(num)
print(new_lst)

# 使用列表推导式实现
new_lst = [i*i for i in lst]
print(new_lst)

从上面的代码片段我们可以看出,取值方式是for i in lst,即从lst列表中依次取出元素;计算方式是i*i,即对每一个取出的元素,让其与本身相乘得到平方;最后将计算的结果依次添加到new_lst中。

案例2:生成由10以内的奇数*2的值组成的列表

# 生成由10以内的奇数*2的值组成的列表
lst = []
for i in range(10):
    if i%2 != 0:
        lst.append(i*2)
print(lst)

# 使用列表推导式实现
new_lst = [i*2 for i in range(10) if i%2 != 0]
print(new_lst)

小练习:
1,生成由30以内能被4整除的数各自加0.5后的值组成的列表

new_lst =[i+0.5 for i in range(30) if i%4 == 0]
print(new_lst)
[0.5, 4.5, 8.5, 12.5, 16.5, 20.5, 24.5, 28.5]

2,生成20个[1,100]之间的随机数

import random
new_lst = [random.randint(1,100) for i in range(20)]
print(new_lst)
[25, 94, 73, 61, 48, 38, 15, 73, 12, 49, 44, 84, 88, 77, 51, 26, 88, 41, 54, 18]

3,生成由列表lst中大于2的偶数的元素的平方组成的列表

lst = [1, 2, 4, 2, 20, 49, 50]
new_lst = [i*i for i in lst if i>2 and i%2 == 0]
print(new_lst)
[16, 400, 2500]

小结:常规结构的表达形式是:在这里插入图片描述

第二章 列表推导式的三目运算结构

之前的篇章里讲过三目运算,其结构为 exp1 if condition else exp2。
其等价形式为:

if condition:
	exp1
else:
	exp2

即判断条件condition 判断为True,计算方式为exp1, 否则计算方式为exp2。

案例3:对1-10(不取10)的数字中,小于5的偶数2,大于5的偶数3,将计算的值添加如新列表

lst = [i for i in range(1,10)]
new_lst = [i*2 if i<5 else i*3 for i in lst if i%2 == 0]
print(new_lst)

从上面的代码片段我们可以看出,取值方式是for i in lst,即从lst列表中依次取出元素,而lst中包含1-9的整数;筛选条件是if i%2 == 0,即只筛选出偶数;计算方式是i2 if i<5 else i3,即对每一个取出的偶数,进行判断,如果小于5,将该数乘以2,否则乘以3;最后将计算的结果依次添加到new_lst中。

小练习:
处理列表中长度小于10的英文名:将长度大于4的英文名转换为大写,小于或等于4的英文名转换为小写。

names = ['alice','Bob','tom','Jerry','Wendy','Smith','liuhui' ,'abcdefghijk']
name_list=[name.upper() if len(name)>4 else name.lower() for name in names if len(name)<10]
print(name_list)
['ALICE', 'bob', 'tom', 'JERRY', 'WENDY', 'SMITH', 'LIUHUI']

小结:三目运算结构的表达形式是
在这里插入图片描述

第三章 列表推导式的循环嵌套结构

案例4:计算list1 和 list2中,每个元素与另外一组元素相乘的乘积。

list1 = [1, 2, 3, 4, 5]
list2 = [1, 3, 5, 7, 9]

# 常规做法
new_list = []
for i in list1:
    for j in list2:
       new_list.append(i*j)
print(new_list)

# 列表推导式
new_list = [i*j for i in list1 for j in list2]
print(new_list)

从上面的代码片段我们可以看出,取值方式进行了循环嵌套,外层循环是是for i in list1 ,内层循环是for j in list2,计算方式是i*j,即对每一个取出的i和j,进行相乘的运算;最后将计算的结果依次添加到new_lst中。

小练习:
1,i的取值范围是[1,5),的取值范围是[1,4)。 将i>2和j<3的数字相乘,其结果保存到新列表中。

# 常规做法
new_list = []
for i in range(1,5):
    if i > 2:   
        for j in range(1,4):  
            if j < 3:
                new_list.append(i*j)
print(new_list)

# 列表推导式
new_list =[i*j for i in range(1,5) if i > 2 for j in range(1,4) if j < 3]
print(new_list)
[3, 6, 4, 8]
[3, 6, 4, 8]

2,将一个嵌套列表转换成一个一维列表

list1=[[4, 19, 27],[34, 38, 49],[49, 53, 54]]
# 常规做法
new_list = []
for i in list1: 
    for item in i:
        new_list.append(item)
print(new_list)


# 列表推导式
new_list =[item for i in list1 for item in i]
print(new_list)

3,从子列表中取出每个子列表的首元素

list1=[[4, 19, 27],[34, 38, 49],[49, 53, 54]]
# 常规做法
new_list = []
for i in list1: 
    new_list.append(i[0])
print(new_list)


# 列表推导式
new_list =[i[0] for i in list1]
print(new_list)

小结:循环嵌套结构的表达形式是
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清弦墨客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值