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

在编程中我们经常遇到下面的一些问题:

  • 过滤掉列表[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 }

输出如下: 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AlexGeek

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值