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

说明:

本文分析的类型:

  • 列表
  • 字典
  • 集合

结合每种类型筛选数据的方法的不同,区分出方法间的差异。

一、列表案例

需求:过滤掉列表中的负数。

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、列表解析

li = [1, 5, -3, -1, 0, 9, -10, 10]

ret = [x for x in li if x >= 0]
print(ret)

列表解析

说明:

列表解析,直接在”[ ]”中操作,将判断条件写在了列表解析中。

问题:既然都能得出结果,那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三大类型数据筛选的更多相关文章

  1. python 容器类型数据 (str list tuple set dict)

    # ###容器类型数据(str list tuple set dict) var1 = "今天心情非常美丽" var2 = [1,2,3,4] var3 = ("黄将用& ...

  2. python之pandas数据筛选和csv操作

    本博主要总结DaraFrame数据筛选方法(loc,iloc,ix,at,iat),并以操作csv文件为例进行说明 1. 数据筛选 a b c (1)单条件筛选 df[df[] # 如果想筛选a列的取 ...

  3. python字典转化成json格式。JSONEncoder和JSONDecoder两个类来实现Json字符串和dict类型数据的互相转换

    遇到问题:进行Webservice接口测试时,对接口入参数据进行了处理,变成了dict格式,去进行接口请求报错. 需要转成成json格式,双引号去扩. 如下: 更改代码: # 在Python标准库的j ...

  4. Python——可变和不可变类型数据

    什么是不可变类型? 存储空间保存的数据不允许被修改,这种数据就是不可变类型. 常见的不可变类型有: 数字类型 int, bool, float, complex, long(2.x) 字符串 str ...

  5. Python数据结构同Json类型数据相互转换的用法

    在做Python接口自动化的时候,经常要用到Python数据结构同Json类型数据相互转换来供我们做进一步的验证提供数据,在此做个记录和总结 Python数据结构同Json类型数据相互转换的函数有:j ...

  6. 分享一个Python脚本--统计redis key类型数据大小分布

    概述 今天主要介绍怎么统计redis key类型数据大小分布. 原理:使用redis命令: scan.pipline.type 和 debug object 来得到 redis key 信息. 脚本 ...

  7. 解决python中转化成json的方法不能序列化datetime类型数据(转)

    Python自带的json.dumps方法序列化数据时候如果格式化的数据中有datetime类型数据时候会提示错误TypeError: datetime.datetime(2012, 12, 12, ...

  8. python小白——进阶之路——day3天-———容器类型数据+Number类型强制类型转换

    -->Number 部分 int :     整型   浮点型 布尔类型  纯数字字符串 float:    整型   浮点型 布尔类型  纯数字字符串 complex:  整型   浮点型 布 ...

  9. python小白——进阶之路——day2天-———容器类型数据(list,set ,tuple,dict,str)

    #容器类型数据 : list tuple # ###列表的特性:可获取,可修改,有序 # 声明一个空列表 listvar = [] print(listvar,type(listvar)) # (1) ...

随机推荐

  1. node.js xtemplate的使用实例

    工程下安装XTemplate并使用它的方法实例说明: 1.安装xtpl npm install xtpl xtemplate --save 2.在views目录添加test.xtpl文件,其内容为 t ...

  2. Microsoft Dynamics CRM 解决数据大于5000时,页面上只能导出5000+数据。

    页面显示: update [MSCRM_CONFIG].[dbo].[DeploymentProperties] set IntColumn=10000 --调整成10000+   页面导出: 一.在 ...

  3. iOS 小谈开发者中的个人、组织(公司、企业)账号

    苹果对开发者主要分为3类:个人.组织(公司.企业).教育机构.即: 1.个人(Individual) 2.组织(Organizations) 组织类又分为2个小类: (1)公司(Company) (2 ...

  4. java在类定义时对hashset的便捷初始化方法

    有时候我们在类成员定义时,当这个类成员类型为 HashSet时,我们可以不方便调用 add函数进行初始化,所以可以采用下面的便捷方式来进行初始化 public class MyTest{ final ...

  5. Oracle学习笔记七 锁

    锁的概念 锁是数据库用来控制共享资源并发访问的机制. 锁用于保护正在被修改的数据 直到提交或回滚了事务之后,其他用户才可以更新数据 对数据的并发控制,保证一致性.完整性.

  6. head/tail实现

         只实现了head/tail的基本功能,默认显示十行及-n参数.       一.使用带缓冲的系统调用.       write/read等系统调用是不带缓冲的,可以包装一层,使其带缓冲. t ...

  7. [iOS]技巧集锦:UITableView自定义Cell中的控件无法完全对齐Cell的左边界和右边界

    这是个很诡异的问题,由于一些特殊需求,我的TableView的Cell的背景色是透明,其中的控件会有背景色,第一个控件和最后一个控件我都用IB自动设了约束,对齐Cell的左边界和右边界,但是自动约束很 ...

  8. idea缓存

    昨天idea出现了一个奇怪的问题: 项目没有按我指定的配置运行,按cmd+:可以看输出.而是运行了配置包下的test环境的配置, 先一看,test环境被初始化为资源包并且在输出目录上, 先取消(fil ...

  9. C++ 模版

    函数模版 #include <iostream> using namespace std; template<typename T> T add(T t1, T t2) { r ...

  10. js 批量设置css样式

    在js中更换样式比较常见,但是批量设置比较少遇见: 但是在做就是插件时,不想额外的添加css文件(需要导入,还可能引起冲突),能批量设置就比较方便了. 以下代码是来自网上的三种方法,使用第二种最方便了 ...