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

说明:

本文分析的类型:

  • 列表
  • 字典
  • 集合

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

一、列表案例

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

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. 在centos 服务器上安装phalcon框架 undefined symbol: php_pdo_get_dbh_ce

    去git 下载对应版本的框架 命令行: sudo yum install php-devel pcre-devel gcc make 然后使用GIT clone到服务器上,然后 git clone g ...

  2. (转)解决 ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务

    下面操作默认在安装Oralce数据库的服务器上运行. 1)确保Oracle 基本服务都已启动 OracleDBConsoleorcl OracleOraDb11g_home1TNSListener O ...

  3. Css3新特性应用之视觉效果

    一.单侧阴影 box-shadow属性的应用,格式:h-shadow v-shadow blur spread color inset属性取值介绍 h-sahdow:水平阴影的位置,允许负值 v-sh ...

  4. Android 5.X新特性之RecyclerView基本解析及无限复用

    说到RecyclerView,相信大家都不陌生,它是我们经典级ListView的升级版,升级后的RecyclerView展现了极大的灵活性.同时内部直接封装了ViewHolder,不用我们自己定义Vi ...

  5. UI-切圆角、透明度、取消按钮点击高亮效果、按钮文字带下划线

    一.切UIView的某个角为圆角 如果需要将UIView的4个角全部都为圆角,做法相当简单,只需设置其Layer的cornerRadius属性即可(项目需要使用QuartzCore框架).而若要指定某 ...

  6. DLL组件注册器

    在实际程序运行中,尤其是绿色软件,都需要对DLL进行注册才能够使用.下面就是笔者开发的一款简单的DLL注册器. http://pan.baidu.com/s/1mhbrN1e

  7. 利用Sharding-Jdbc实现分表

    你们团队使用SpringMVC+Spring+JPA框架,快速开发了一个NB的系统,上线后客户订单跟雪花一样纷沓而来. 慢慢地,你的心情开始变差,因为客户和产品的抱怨越来越频繁,抱怨的最多的一个问题就 ...

  8. MySQL 博客文章目录(2016-08-20更新)

    1 MySQL安装配置 Linux MySQL源码安装缺少ncurses-devel包 Linux平台卸载MySQL总结 Linux 卸载mysql-libs包出现错误 2  MySQL管理配置 My ...

  9. Long类型的数据转换时间格式方法

    function getDate(date) { //得到日期对象 var d=new Date(date); //得到年月日 var year =d.getFullYear(); ); var da ...

  10. Hbase入门教程--单节点伪分布式模式的安装与使用

    Hbase入门简介 HBase是一个分布式的.面向列的开源数据库,该技术来源于 FayChang 所撰写的Google论文"Bigtable:一个结构化数据的分布式存储系统".就像 ...