版权声明:如有转载复制请注明出处,博主QQ715608270,欢迎沟通交流! https://blog.csdn.net/qq_41000891/article/details/84564375
在编程中我们经常遇到下面的一些问题:
- 过滤掉列表[3, 9, -1, 10, 20, -2...]中的负数
- 筛选出字典{'Lilei': 79, 'Tim': 88, 'Lucy':92...}中的值高于90的项
- 筛选出集合{77, 89, 32, 20...}中能被3整除的元素
在Python中,通用的做法是直接使用循环迭代:
data = [1, 5, -3, -2, 6, 0, 9]
res = []
for x in data:
if x >= 0:
res.append(x)
print(res)
但是在python中我们还可以使用一些相对高级的工具:
一、列表
①使用filter函数
先创建一个随机列表:
from random import randint
data = [ randint(-10, 10) for _ in range(10) ]
输出如下:
使用filter函数进行过滤:
filter(lambda x: x>=0, data)
输出如下:
②使用列表解析
[ x for x in data if x>=0 ]
③测试两种方法使用的时间
timeit filter(lamba x: x>=0, data)
timeit [ x for x in data if x>=0 ]
输出如下:
根据时间可以看出,列表解析更快一些,而且这两种解析远远快于迭代的原始方案。
二、字典
先构建一个随机字典:
d = { x: randint(60, 100) for x in range(1, 21) }
输出如下:
然后进行筛选:
{ k: v for k, v in d.iteritems() if v>90 }
筛选结果如下:
三、集合
使用类表的数据,进行筛选:
{ x for x in s if x % 3 == 0 }
输出如下: