首页 > 代码库 > python三大类型数据筛选
python三大类型数据筛选
如何在列表,字典,集合中根据条件刷选数据
说明:
本文分析的类型:
- 列表
- 字典
- 集合
结合每种类型筛选数据的方法的不同,区分出方法间的差异。
一、列表案例
需求:过滤掉列表中的负数。
li = [1,5,-3,-1,0,9,-10,10]
1、通用方法:迭代列表获取列表中的每个元素进行选择
代码:
li = [1, 5, -3, -1, 0, 9, -10, 10]ret = []for i in li: if i >= 0: ret.append(i)print(ret)
2、filter函数
语法:filter(lambda x: x >= 0, data)
li = [1, 5, -3, -1, 0, 9, -10, 10]new_li = []ret = filter(lambda x: x >= 0, li)print(ret)for i in ret: new_li.append(i)print(new_li)
结果:
<filter object at 0x0178A4B0>[1, 5, 0, 9, 10]
说明:
filter直接返回的结果是一个课迭代对象。要想获取其中的数据要对filter结果进行遍历。
上面的代码也可以简写:
li = [1, 5, -3, -1, 0, 9, -10, 10]new_li = []ret = [x for x in filter(lambda x: x >= 0, li)]print(ret)
3、列表解析
li = [1, 5, -3, -1, 0, 9, -10, 10]ret = [x for x in li if x >= 0]print(ret)
说明:
列表解析,直接在”[ ]”中操作,将判断条件写在了列表解析中。
问题:既然都能得出结果,那filter和列表解析那个好那?
我们可以通过测试两段代码执行的时间。
import timeitli = [1, 5, -3, -1, 0, 9, -10, 10]t1 = timeit.Timer(‘[x for x in filter(lambda x: x >= 0, %s)]‘ % li)t2 = timeit.Timer(‘[x for x in %s if x >= 0]‘ % li)print(t1.timeit())print(t2.timeit())
结果:
1.94498479991189030.865514452222458
说明:
1、结果可以明显看出,列表解析所用的时间是filter的时间的一半左右,即,列表解析最快,所以推荐使用列表解析。
2、这2中方式都是远快于使用 for 这种迭代方式的。
二、字典案例
需求:筛选出value值高于90的项。
dic = {‘haha’:79, ‘heihei’:88, ‘hehe’:95, ‘xxx’:100}
1、普通方法
dic = {‘haha‘: 79, ‘heihei‘: 88, ‘hehe‘: 95, ‘xxx‘: 100}new_dic = {}for k,v in dic.items(): if v >= 90: new_dic[k] = vprint(new_dic)
结果:
{‘hehe‘: 95, ‘xxx‘: 100}
2、字典解析
dic = {‘haha‘: 79, ‘heihei‘: 88, ‘hehe‘: 95, ‘xxx‘: 100}ret = {k: v for k, v in dic.items() if v >= 90}print(ret)
说明:
字典解析运行时间远快于普通方法。
三、集合案例
需求:筛选出集合中能被3整除的元素。
s = {77,88,99,6,15,20}
1、普通方法
s = {77, 88, 99, 6, 15, 20}new_s = set()for i in s: if i % 3 == 0: new_s.add(i)print(new_s)
结果:
{99, 6, 15}
2、集合解析
s = {77, 88, 99, 6, 15, 20}ret = {x for x in s if x % 3 == 0}print(ret)
说明:
集合解析也是远快于普通for循环的。
python三大类型数据筛选
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。