先给一些实际栗子
- 过滤掉列表
[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)
复制代码
如果我的文章对你有帮助,记得点赞鸭