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

说明:

本文分析的类型:

  • 列表
  • 字典
  • 集合

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

一、列表案例

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

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. Spring+ibatis动态管理数据源

    Spring动态配置多数据源,即在大型应用中对数据进行切分,并且采用多个数据库实例进行管理,这样可以有效提高系统的水平伸缩性.而这样的方案就会不同于常见的单一数据实例的方案,这就要程序在运行时根据当时 ...

  2. elasticsearch高级配置二----线程池设置

    一个Elasticsearch节点会有多个线程池,但重要的是下面四个: 索引(index):主要是索引数据和删除数据操作(默认是cached类型) 搜索(search):主要是获取,统计和搜索操作(默 ...

  3. 时光倒流程序设计-AlloyTicker

    熵与负熵 熵遵循熵增原理,即无序非热能与热能之间的转换具有方向性.薛定谔说过:生命本质在于负熵.熵代表的是无序,负熵就是熵的对立,而负熵表示的则是有序.汲取负熵(米饭.面包.牛奶.鸡蛋),可以简单的理 ...

  4. GridView的各种属性

    <GridView android:id="@+id/movie_list" android:layout_width="906dp" android:l ...

  5. 你必须知道的HTTP错误

    发送网络请求有时失败,分析一下响应行,在响应的响应行内,你会发现响应行由三部分组成,用空格来隔开,HTTP/1.1 404 NOT FOUND,第一个是响应的HTTP的版本,第二个和第三个是状态值. ...

  6. Java web会话简单应用

    Java会话主要分为两块:Cookie和HttpSessionCookie技术:会话数据保存在浏览器客户端.Session技术:会话数据保存在服务器端.一.下面介绍一下Cookie的应用1. Cook ...

  7. Django模板的继承

    一.extend 1.extend继承模板 2.一个文件中只能继承一个模板 3.extend继承模板中的所有内容,模板的内容包括:html的head和body ,eg:

  8. ambari2.4.2_centos7 学习全纪录

    目录: 为什么要用Ambari 概念概述 原理简介 安装 创建集群 创建集群 手动修改配置 NameNode HA 安装SmartSense 二次开发 为什么要用Ambari Ambari 是 Apa ...

  9. [数据科学] 从text, json文件中提取数据

    文本文件是基本的文件类型,不管是csv, xls, json, 还是xml等等都可以按照文本文件的形式读取. #-*- coding: utf-8 -*- fpath = "data/tex ...

  10. Oracle插入日期格式出现 ORA-01843: not a valid month的解决办法

    Oracle 在插入时间类型的时候如果不注意插入的格式就很容易出错,基本上只要转一下时间格式就可以解决. DateTime转成特定格式的字符串: var dateString = DateTime.N ...