Python如何在列表,字典,集合中根据条件筛选数据?

版权声明:如有转载复制请注明出处,博主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 }

输出如下: 

猜你喜欢

转载自blog.csdn.net/qq_41000891/article/details/84564375