1、Python 中【for in if】的用法

 [expression for x in X [if condition] for y in Y [if condition] ... for n in N [if condition]]

执行顺序从左到右,从外到内。

如下所示,想从一个列表中获取大于0的值,首先想到的就是循环。

data = [-2, 4, -6, -4, 8, 19, -30]
res = []
for x in data:
    if x >= 0:
        res.append(x)
print(res)
# 输出 [4, 8, 19]

但是这样明显太臃肿了,语法不够简洁,可以尝试 【for in if】组合使用,对这个循环进行简化。

data = [-2, 4, -6, -4, 8, 19, -30]
res = [x for x in data if x >= 0]
print(res)
# 输出 [4, 8, 19]

获得一样的结果,代码只需要一行,是不是明显更简洁了。

同理,像最开始的语法展示一样,我们还可以嵌套多个 for 语句,如下所示:

res = [x + y for x in 'abc' for y in 'xyz']
print(res)
# ['ax', 'ay', 'az', 'bx', 'by', 'bz', 'cx', 'cy', 'cz']

python2.7之后还支持集合和字典的推导

# 在值不重复的情况下,我们可以通过字典推导式快速交换键值对
data = {'a':1, 'b':2, 'c':3}
res = {value: key for key, value in data.items()}
print(res)
# 结果 {1: 'a', 2: 'b', 3: 'c'}

用这种方式可以实现列表、集合、字典的推导,还可以在列表、字典、集合中快速筛选你需要的数据,下面再介绍一种列表的筛选方式,使用内置的filter函数,filter()函数接收一个函数 f 和一个序列,函数 f 的作用是对每个元素进行判断,返回 True或 False,filter()根据判断结果自动过滤掉不符合条件的元素,返回由符合条件元素组成的新的序列Iterator。

data = [-2, 4, -6, -4, 8, 19, -30]
res = filter(lambda x: x>=0, data)
print(res)
# <filter object at 0x000001BC246EC128>
# python3的filter返回时一个迭代器, 可以使用next逐个取出数据,取没了会抛出一个异常
# 也可以通过list构造器获取一个新的列表
res = list(res)
print(res)
# [4, 8, 19]

不推荐使用这种方式,要创建一个函数,并且比列表解析的方式稍微慢一点。

  • 7
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值