Python进阶-如何优雅的在列表,字典,集合中筛选数据

先给一些实际栗子

  • 过滤掉列表[1, 3, 8, -2, 5 ...]中的负数
  • 筛选出字典 {'python':90, 'java':20. 'c++':70...}中值高于90的项
  • 筛选集合(77, 98, 32, 40...)中可以被3整除的数

通用的方法就是进行迭代(先对容器进行for循环,在进行条件判断)但是不符合我们优雅的身份,我们不采用


1.列表问题

首先我们先导入一个神奇的random函数,他会帮助我们随机生成一个列表

from random import randint
复制代码

随机生成10个范围-10 - 10的数

data = [randint(-10, 10) for i in range(10)]
复制代码

接下来使用我们的主角filter函数上场,简单解释一下这个参数,它的第一个参数接收一个函数(我们通常用lambda创建一个用来过滤的匿名函数,lambda需要一个参数由data依次传递给它,之后这个函数返回一个布尔值,为真的,该值就会被返回),第二个参数接收列表。好像有点懵逼。看代码栗子

filter(lambda x: x > 0, data)
复制代码

这样就大功告成了

接下来,我们使用列表解析去完成这个问题

[x for x in data if x > 0]
复制代码

同样可以得出一样的答案

通常首选列表解析,因为列表解析速度快,但是都由于迭代

2.字典问题

依旧随机生成字典

d = {x: randint(60, 100) for x in range(1, 21)}
复制代码

现在我们只要分数大于90的,我们来弄一个字典解析

{k: v for k, v in d.items() if v > 90}
复制代码

ok,大功告成,来继续解决集合问题

3.集合问题

随机集合走一波

s = set([randint(-10, 10) for i in range(10)])
复制代码

我们查找下集合里可以被3整数的数,也就是集合解析

(x for x in s if x  % 3 == 0)
复制代码

如果我的文章对你有帮助,记得点赞鸭

转载于:https://juejin.im/post/5cda97895188256940347633

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值