由浅入深,玩转Python列表推导式

列表推导式提供了从序列创建列表的简单途径。通常应用程序将一些操作应用于某个序列的每个元素,用其获得的结果作为生成新列表的元素,或者根据确定的判定条件创建子序列。每个列表推导式都在 for 之后跟一个表达式,然后有零到多个 for 或 if 子句。返回结果是一个根据表达从其后的 for 和 if 上下文环境中生成出来的列表。 如果希望表达式推导出一个元组,就必须使用括号。

一、入门玩法(列表、集合、字典)

常规代码:生成一个列表

# 定义一个空列表
L=[]
for x in range(5):
    L.append(x)
print(L)  #输出[0, 1, 2, 3, 4]

1、使用列表推导式实现上述效果

L1=[x for x in range(5)]
print(L1)   #输出[0, 1, 2, 3, 4]

2、集合推导式

L2={x for x in range(5)}
print(L2)   #输出{0, 1, 2, 3, 4}

L3={x*2 for x in range(5)}
print(L3)   #输出{0, 2, 4, 6, 8}

3、字典推导式

# 字典推导式
L4={x:x for x in range(5)}
print(L4)  # 输出 {0: 0, 1: 1, 2: 2, 3: 3, 4: 4}

L5={x:x*x for x in range(5)}
print(L5)  # 输出 {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}

4、二维

list1 = [2,4,6,3]
list3 = [[x,x**2] for x in list1[0:3]]
print(list3)

运行结果:
[[2, 4], [4, 16], [6, 36]]

5、和if结合

list1 = [2,4,6,3]
list4 = [x*3 for x in list1 if x < 5]
print(list4)

运行结果:
[6, 12, 9]

二、双循环或多循环

temp1= [1,2,3]
temp2 =[4,5,6]

temp3 = [x+y for x in temp1 for y in temp2]
print(temp3)

运行结果:
[5, 6, 7, 6, 7, 8, 7, 8, 9]

# 注意此时的temp3会有9个元素,因为第一个列表的元素需要分别和第二个列表每个元素相加

三、嵌套

1、简单嵌套

# 用推导式控制小数点的位数
nest01 = [str(round(11/7,i))for i in range(1,6)]
print(nest01)

运行结果:
['1.6', '1.57', '1.571', '1.5714', '1.57143']

2、实现矩阵列表的转置运算

# 定义一个3X4的矩阵列表:
nest02 = [[1,1,1,1],[2,2,2,2],[3,3,3,3]]

# 方式一:直接列表推导式
nest03 = [[row[i]for row in nest02]for i in range(4)]
print(nest03)

运行结果:
[[1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3]]


# 方式二:空列表+遍历+append
nest04 = []
for i in range (4):
	nest04.append([row[i] for row in nest02])
print(nest04)

运行结果:
[[1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3]]


# 方式三:空列表+双遍历+append
transposted = []
for i in range(4):
	transposted_row = []
	for row in nest02:
		transposted_row.append(row[i])
	transposted.append(transposted_row)
print(transposted)

运行结果:
[[1, 2, 3], [1, 2, 3], [1, 2, 3], [1, 2, 3]]

四、一行代码表白爱情

print('\n'.join([''.join([('Love'[(x-y) % len('Love')] 
if ((x*0.05)**2+(y*0.1)**2-1)**3-(x*0.05)**2*(y*0.1)**3 <= 0else' ') 
for x in range(-30, 30)]) for y in range(30, -30, -1)]))

在这里插入图片描述

  • 14
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Python爬虫的学习可以从浅到深逐步进行,以下是一个可能的学习路径: 1. 网络基础知识:了解HTTP协议和HTML基础知识,理解网页结构和标签的含义。 2. requests库:学习使用Python的requests库发送HTTP请求,获取网页内容。可以使用该库来实现简单的网页爬取。 3. BeautifulSoup库:学习使用BeautifulSoup库解析HTML文档,提取所需的信息。该库可以帮助我们以更方便的方式处理网页数据。 4. 数据存储:学习使用CSV、JSON、数据库等方式来存储爬取到的数据,以便后续使用和分析。 5. 爬虫进阶:学习处理JavaScript渲染的页面,使用Selenium库模拟浏览器行为。还可以学习使用代理IP、验证码处理等技术来应对一些反爬机制。 6. 爬虫框架:了解并学习使用一些流行的爬虫框架,如Scrapy,可以大幅度提高爬虫的开发效率和稳定性。 7. 反爬虫策略:学习了解常见的反爬虫策略,如User-Agent伪装、IP封禁等,并学会应对这些策略,提高爬虫的鲁棒性。 8. 数据清洗和分析:学习使用Python的数据处理和分析库,如Pandas、NumPy、Matplotlib等,对爬取到的数据进行清洗和分析。 9. 分布式爬虫:学习使用分布式爬虫框架,如Scrapy-Redis,来提高爬虫的并发能力和抓取速度。 10. 伦理和法律问题:了解爬虫的伦理和法律问题,遵守相关法律法规,不进行非法、恶意的爬取行为。 以上是一个学习Python爬虫的大致路径,根据自己的兴趣和实际需求可以自行调整学习的深度和广度。注意,在进行爬虫时请遵守网站的相关规定和爬虫道德准则。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

清平乐的技术博客

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

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

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

打赏作者

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

抵扣说明:

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

余额充值