爬虫 (二十) python各种推导式(超级详细) (十一)

本文详细介绍了Python中的推导式,包括列表推导式、字典推导式和集合推导式。通过实例展示了如何利用推导式过滤、转换数据,以及创建新的数据结构。例如,过滤长度小于或等于3的字符串,生成间隔时间的列表,求矩阵元素的乘积等,帮助读者深入理解推导式的用法。
摘要由CSDN通过智能技术生成

点击上方蓝字关注我们

欢迎关注我的公众号,志学Python

推导式comprehensions(又称解析式),是Python的一种独有特性。推导式是可以从一个数据序列构建另一个新的数据序列的结构体。共有三种推导,在Python2和3中都有支持:

列表(list)推导式
字典(dict)推导式
集合(set)推导式

列表推导式 基本格式为:

[表达式 for 变量 in 列表] 或者 [表达式 for 变量 in 列表 if 条件]

具体可分为两种:

  • [x for x in data if condition] 此处if主要起条件判断作用,data数据中只有满足if条件的才会被留下,最后统一生成为一个数据列表。

  • [exp1 if condition else exp2 for x in data] 此处if...else主要起赋值作用,当data中的数据满足if条件时将其做exp1处理,否则按照exp2处理,最后统一生成为一个数据列表

为了加深理解我们举个例子:

variable = [out_exp_res for out_exp in input_list if out_exp == 2]
out_exp_res:  列表生成元素表达式,可以是有返回值的函数
for out_exp in input_list:  迭代input_list将out_exp传入out_exp_res表达式中
if out_exp == 2:  根据条件过滤哪些值可以

我们可以再举几个例子:

multiples = [i for i in range(30) if i % 3 == 0]
print(multiples)
Output: [0, 3, 6, 9, 12, 15, 18, 21, 24, 27]
multiples = [squared(i) for i in range(30) if i % 3 == 0]
print multiples
Output: [0, 9, 36, 81, 144, 225, 324, 441, 576, 729]
data = ['driver', '2017-07-13', 1827.0, 2058.0, 978.0, 1636.0, 1863.0, 2537.0, 1061.0]
(1)若我要取得以上列表中值大于2000的数值,这里可以使用列表推导式的形式①: 
[x for x in data if x > 2000] 
得到如下结果(字符串类型数据被认为是无穷大数):
['driver', '2017-07-13', 2058.0, 2537.0]
(2)若要解决我上面提到的问题,则需要使用列表推导式的形式② : 
[int(x) if type(x) == float else x for x in data] 
得到结果:
['driver', '2017-07-13', 1827, 2058, 978, 1636, 1863, 2537, 1061]

两个例子肯定不够理解的,我们要实战一下,亲自上手敲敲代码例1:过滤掉长度小于或等于3的字符串列表,并将剩下的转换成大写字母:

>>> names = ['Bob','Tom','alice','Jerry','Wendy','Smith']
>>> new_names = [name.upper()for name in names if len(name)>3]
>>> print(new_names)
['ALICE', 'JERRY', 'WENDY', 'SMITH']
</
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
博客
v8worker
05-08 2883
05-06 2861
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值