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
结果:
<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、列表解析
说明:
列表解析,直接在”[ ]”中操作,将判断条件写在了列表解析中。
问题:既然都能得出结果,那filter和列表解析那个好那?
我们可以通过测试两段代码执行的时间。
import timeit li = [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.9449847999118903
0.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] = v print(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三大类型数据筛选的更多相关文章
- python 容器类型数据 (str list tuple set dict)
# ###容器类型数据(str list tuple set dict) var1 = "今天心情非常美丽" var2 = [1,2,3,4] var3 = ("黄将用& ...
- python之pandas数据筛选和csv操作
本博主要总结DaraFrame数据筛选方法(loc,iloc,ix,at,iat),并以操作csv文件为例进行说明 1. 数据筛选 a b c (1)单条件筛选 df[df[] # 如果想筛选a列的取 ...
- python字典转化成json格式。JSONEncoder和JSONDecoder两个类来实现Json字符串和dict类型数据的互相转换
遇到问题:进行Webservice接口测试时,对接口入参数据进行了处理,变成了dict格式,去进行接口请求报错. 需要转成成json格式,双引号去扩. 如下: 更改代码: # 在Python标准库的j ...
- Python——可变和不可变类型数据
什么是不可变类型? 存储空间保存的数据不允许被修改,这种数据就是不可变类型. 常见的不可变类型有: 数字类型 int, bool, float, complex, long(2.x) 字符串 str ...
- Python数据结构同Json类型数据相互转换的用法
在做Python接口自动化的时候,经常要用到Python数据结构同Json类型数据相互转换来供我们做进一步的验证提供数据,在此做个记录和总结 Python数据结构同Json类型数据相互转换的函数有:j ...
- 分享一个Python脚本--统计redis key类型数据大小分布
概述 今天主要介绍怎么统计redis key类型数据大小分布. 原理:使用redis命令: scan.pipline.type 和 debug object 来得到 redis key 信息. 脚本 ...
- 解决python中转化成json的方法不能序列化datetime类型数据(转)
Python自带的json.dumps方法序列化数据时候如果格式化的数据中有datetime类型数据时候会提示错误TypeError: datetime.datetime(2012, 12, 12, ...
- python小白——进阶之路——day3天-———容器类型数据+Number类型强制类型转换
-->Number 部分 int : 整型 浮点型 布尔类型 纯数字字符串 float: 整型 浮点型 布尔类型 纯数字字符串 complex: 整型 浮点型 布 ...
- python小白——进阶之路——day2天-———容器类型数据(list,set ,tuple,dict,str)
#容器类型数据 : list tuple # ###列表的特性:可获取,可修改,有序 # 声明一个空列表 listvar = [] print(listvar,type(listvar)) # (1) ...
随机推荐
- 手机端访问web调用数字键盘。
转自 http://www.webkfa.com/one4/w1937.html 最近在做手机页面时,遇到数字输入的键盘的问题,之前的做法只是一刀切的使用 type="tel", ...
- 乱码引起的CSS失效原理,解决技巧。
由于一个中文是两个字符组成,在编码不一致的情况下会引发字符的“重新”组合,(半个汉字的编码字符与后面的字符组合生成新的“文字”)引发原本的结束符合“变异”,从而导致找不到结束符号,使得后面的CSS就会 ...
- 利用github pages创建简单的网站
github.com 作为最流行的源代码管理工具已经风靡全球,同时在依托于github也衍生出了各种各样的应用,比如可以利用github搭建博客系统等等. 先换个话题,我们每人手头都或多或少有些&qu ...
- iOS 开发者账号到期续费流程
1.登录developer.apple.com,查看到期时间 2.到期提醒通知,点击Renew Membership续费(一般提前一个月提醒续费) 3.个人开发者账号续费需要支付 688人民币/年(9 ...
- android 启动模式介绍
Android启动模式 (1)Task:与Android系统是个多任务的系统中的任务是不同的.后者更倾向于多进程和多线程来说的,而这里的任务与application(应用程序)和activity(活动 ...
- [Deprecated!] Android开发案例 - 微博正文
Deprecated! 更好的实现方式: 使用 android.support.design.widget.CoordinatorLayout. 本文详细介绍如何实现如下图中的微博正文页面效果, 其中 ...
- MVC @Html.TextBoxFor 格式化
不能使用Html.EditorFor() 因为需要为生成的控件 指定HTML特性 @Html.TextBoxFor(model => model.StartDate, new { Value = ...
- PowerDesigner从SqlServer数据库中导入实体模型
PowerDesigner从SqlServer数据库中导入实体模型 时间 2013-06-28 10:26:34 CSDN博客 原文 http://blog.csdn.net/sxycxwb/art ...
- 跳入linux的第一个坑-因为安装Ubuntu导致的硬盘被误格的恢复.(记TestDisk使用记录)
不看废话,直接跳到操作说明 前几日心血来潮想把家中的旧笔记本换成Linux操作系统,算是在业余生活中正式投入Linux的怀抱.说干就干,发行版选择了Ubuntu,下载了Ubuntu16.04的ISO, ...
- Linq To SQL 的问题点滴
String 类型的字段问题 String类型的字段生成的SQL 没有判断为空的情况时 生成的SQL: 这里判断为空的逻辑很明显不是本来的意思. 左关联 SQL关联中经常会用到左关联,那么Linq ...