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) ...
随机推荐
- entityframework学习笔记--009-使用原生sql语句操作数据
1 使用原生SQL语句更新--Database.ExecuteSqlCommand 假设你有一张如图9-1所示的Payment数据库表. 图9-1 1.1 实体类型: public class Pay ...
- Amabri:如何删除或停止指定的服务
原文地址:https://cwiki.apache.org/confluence/display/AMBARI/Using+APIs+to+delete+a+service+or+all+host+c ...
- 关于addSubView需要注意的事项 -今天吃了一个大亏
addSubview: Adds a view to the end of the receiver’s list of subviews. 译:增加一个视图到接收者的子视图列表中. - (void) ...
- swift-分支
swift相当于OC的比较 if后的括号可以省略 if后只能接bool值 if后的大括号不能省略 let num1 = 5.0 let num2 = 4.0 let boo :Bool = true ...
- MTU(Maximum transmission unit) 最大传输单元
最大传输单元(Maximum transmission unit),以太网MTU为1500. 不同网络MTU如下: 如果最大报文数据大小(MSS)超过MTU,则会引起分片操作. 路径MTU: 网路 ...
- Merge 的小技巧
今天跟大家分享一下搬动数据使用Merge的方法. 有些时候,当我们做数据搬动的时候,有时候做测试啊,换对象啊,就会存在有时候外键存在,不知道怎么对应的关系.比如我现在有架构相同的两组table , A ...
- mssqlserver数据导出到另外一个数据库
mssqlserver数据导出到另外一个数据库 准备源数据库,找到想要导出的数据库,右键选择"任务"再选择"导出数据" 设置源数据库信息 3.设置目标数据库,导 ...
- Hibernate的 Restrictions用法
方法说明 方法 说明 Restrictions.eq = Restrictions.allEq 利用Map来进行多个等于的限制 Restrictions.gt > Restrictions.ge ...
- Linux安装详情图解
本文讲解Linux的安装 因为是纯属学习使用,所以安装在了虚拟机里 需要软件: VirtualBox-5.1.10 ubuntu-16.04.1-desktop-amd64 说明: 虚拟机可以选择 ...
- 切换“使用被动式FTP”
-- 本文版权归博客园和dige1993所有,访问作者博客 -- 最近用Dreamweaver做了几个网页,打算上传到远程FTP服务器的时候,同步文件和连接FTP服务器时总是超时出错,一直处在&quo ...