python 字典dict和列表list的读取速度问题, range合并
嗨喽,大家好呀~这里是爱看美女的茜茜呐

python 字典和列表的读取速度问题
最近在进行基因组数据处理的时候,需要读取较大数据(2.7G)存入字典中,
然后对被处理数据进行字典key值的匹配,在被处理文件中每次读取一行进行处理后查找是否在字典的keys中,
👇 👇 👇 更多精彩机密、教程,尽在下方,赶紧点击了解吧~
python源码、视频教程、插件安装教程、资料我都准备好了,直接在文末名片自取就可
以下两段代码的效率差别非常大:
第一段:
if(pos in fre_dist.keys()):
newvalue= fre_dist[pos]
第二段:
if(pos in fre_dist):
newValue=fre_dist[pos]
在处理3万条数据时,第二段代码的速度是第一段代码速度的上千倍。
原因是:第一段代码 fre_dist.keys()变成了list,python在检索list的时候是比较慢的,第二段代码 fre_dist是字典,python在检索字典的时候速度是比较快的。
dict结构,我想大多数人都会想到for key in dictobj的方法,确实这个方法在大多数情况下都是适用的。
但是并不是完全安全,请看下面这个例子:
代码如下:
'''
学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:261823976
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
#这里初始化一个dict
>>> d = {'a':1, 'b':0, 'c':1, 'd':0}
#本意是遍历dict,发现元素的值是0的话,就删掉
>>> for k in d:
... if d[k] == 0:
... del(d[k])
...
Traceback (most recent call last):File "<stdin>", line 1, in <module>
RuntimeError: dictionary changed size during iteration
#结果抛出异常了,两个0的元素,也只删掉一个。
>>> d
{'a': 1, 'c': 1, 'd': 0}>>> d = {'a':1, 'b':0, 'c':1, 'd':0}
#d.keys() 是一个下标的数组
>>> d.keys()
['a', 'c', 'b', 'd']
#这样遍历,就没问题了,因为其实其实这里遍历的是d.keys()这个list常量。
>>> for k in d.keys():
... if d[k] == 0:
... del(d[k])
...
>>> d
{'a': 1, 'c': 1}
#结果也是对的
>>>
其实,这个例子是我简化过的,我是在一个多线程的程序里发现这个问题的,
所以,我的建议是:遍历dict的时候,养成使用 for k in d.keys() 的习惯。
不过,如果是多线程的话,这样就绝对安全吗?
也不见得:当两个线程都取完d.keys()以后,如果两个线程都去删同一个key的话,先删的会成功,后删的那个肯定会报 KeyError ,这个看来只能通过其他方式来保证了。
dict 两种遍历方式的性能对比
关于纠结dict遍历中带括号与不带括号的性能问题
代码如下:
'''
学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:261823976
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
for (d,x) in dict.items():print "key:"+d+",value:"+str(x)for d,x in dict.items():print "key:"+d+",value:"+str(x)
我们可以看出,dict条数在200一下的时候是带括号的性能比较高一点,但是在200条以上的数据后不带括号的执行时间会少些.
字典用花括号({})表示,里面的项成对出现,一个 key 对应一个 value;key 与 value
之间用冒号(:)分隔;不同的项之间用逗号(,)分隔。
Python Shell:
n = {'username':'zz',"password":123}
n.keys()
dict_keys(['username', 'password'])
n.values()
dict_keys(['zz', 123])n.items()
dict_items([('username', 'zc'), ('password', 123)])for (k,v) in n.items():print("this's key:%r" %k)print("this's value:%r" %v")this's key:'username'
this's value:'zc'
this's key:'password'
this's value:123
zip():就是依次取出每一个数组的元素,然后组合
'''
学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:261823976
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
n = [1,2,3]
m = ['a','b','c']
a = zip(m,n)for i in a:print(i)('a', 1)
('b', 2)
('c', 3)
n = [1,2,3]
m = ['a','b','c']
a = zip(m,n)for (m,n) in a:print(m,n)a 1
b 2
c 3
range合并:
for i in range(48,58)+range(65,91):c8=chr(i);
尾语
感谢你观看我的文章呐~本次航班到这里就结束啦 🛬
希望本篇文章有对你带来帮助 🎉,有学习到一点知识~
躲起来的星星🍥也在努力发光,你也要努力加油(让我们一起努力叭)。

相关文章:
python 字典dict和列表list的读取速度问题, range合并
嗨喽,大家好呀~这里是爱看美女的茜茜呐 python 字典和列表的读取速度问题 最近在进行基因组数据处理的时候,需要读取较大数据(2.7G)存入字典中, 然后对被处理数据进行字典key值的匹配,在被处理文件中每次…...
测试用例的设计方法(全):等价类划分方法
一.方法简介 1.定义 是把所有可能的输入数据,即程序的输入域划分成若干部分(子集),然后从每一个子集中选取少数具有代表性的数据作为测试用例。该方法是一种重要的,常用的黑盒测试用例设计方法。 2.划分等价类: 等价类是指某个输入域的…...
Office技巧(持续更新)(Word、Excel、PPT、PowerPoint、连续引用、标题、模板、论文)
1. Word 1.1 标题设置为多级列表 选住一级标题,之后进行“定义新的多级列表” 1.2 图片和表的题注自动排序 正常插入题注后就可以了。如果一级标题是 “汉字序号”,那么需要对题注进行修改: 从原来的 图 { STYLEREF 1 \s }-{ SEQ 图 \* A…...
Java实现ORM第一个api-FindAll
经过几天的业余开发,今天终于到ORM对业务api本身的实现了,首先实现第一个查询的api 老的C#定义如下 因为Java的泛型不纯,所以无法用只带泛型的方式实现api,对查询类的api做了调整,第一个参数要求传入实体对象 首先…...
HFSS笔记——求解器和求解分析
文章目录 1、求解器2、求解类型3、自适应网格剖分4、求解频率选择4.1 求解设置项的含义4.2 扫频类型 1、求解器 自从ANSYS将HFSS收购后,其所有的求解器都集成在一起了,点击Project,会显示所有的求解器类型。 其中, HFSS design&…...
jenkins配置gitlab凭据
下载Credentials Binding插件(默认是已经安装了) 在凭据配置里添加凭据类型 点击保存 Username with password: 用户名和密码 SSH Username with private 在凭据管理里面添加gitlab账号和密码 点击全局 点击添加凭据(版本不同…...
0基础学习PyFlink——用户自定义函数之UDTF
大纲 表值函数完整代码 在《0基础学习PyFlink——用户自定义函数之UDF》中,我们讲解了UDF。本节我们将讲解表值函数——UDTF 表值函数 我们对比下UDF和UDTF def udf(f: Union[Callable, ScalarFunction, Type] None,input_types: Union[List[DataType], DataTy…...
【Java 进阶篇】Java Request 原理详解
在网络应用开发中,HTTP请求是一项常见而关键的任务。当我们使用Java编写网络应用时,了解HTTP请求的工作原理变得至关重要。本文将详细介绍Java中HTTP请求的原理,包括请求的结构、发送请求的方法以及处理请求的过程。 HTTP请求的基本结构 HT…...
13 结构性模式-装饰器模式
1 装饰器模式介绍 在软件设计中,装饰器模式是一种用于替代继承的技术,它通过一种无须定义子类的方式给对象动态的增加职责,使用对象之间的关联关系取代类之间的继承关系. 2 装饰器模式原理 //抽象构件类 public abstract class Component{public abstract void operation(); }…...
支持向量机(SVM)
一. 什么是SVM 1. 简介 SVM,曾经是一个特别火爆的概念。它的中文名:支持向量机(Support Vector Machine, 简称SVM)。因为它红极一时,所以关于它的资料特别多,而且杂乱。虽然如此,只要把握住SV…...
Rabbitmq----分布式场景下的应用
服务异步通信-分布式场景下的应用 如果单机模式忘记也可以看看这个快速回顾rabbitmq,在做学习 消息队列在使用过程中,面临着很多实际问题需要思考: 1.消息可靠性 消息从发送,到消费者接收,会经理多个过程: 其中的每一…...
springboot + redis实现签到与统计功能
在很多项目中都会有签到与统计功能,最容易想到的方案是创建一个签到表来记录每个用户的签到记录,比如设计一个mysql数据库表: CREATE TABLE tb_sign id bigint(20) unsigned NOT NULL AUTOINCREMENT COMMENT 主键, user_id bigint(20) unsig…...
Redis | 数据结构(02)SDS
一、键值对数据库是怎么实现的? 在开始讲数据结构之前,先给介绍下 Redis 是怎样实现键值对(key-value)数据库的。 Redis 的键值对中的 key 就是字符串对象,而 value 可以是字符串对象,也可以是集合数据类型…...
Linux C语言开发-D7D8运算符
算术运算符:-*/%,浮点数可以参与除法运算,但不能参与取余运算 a%b:表示取模或取余 关系运算符:<,>,>,<,,! 逻辑运算符:!,&&,|| &&,||逻辑运算符是从左到右,依次运算&#…...
redis 配置主从复制,哨兵模式案例
哨兵(Sentinel)模式 1 . 什么是哨兵模式? 反客为主的自动版,能够自动监控master是否发生故障,如果故障了会根据投票数从slave中挑选一个 作为master,其他的slave会自动转向同步新的master,实现故障自动转义 2 . 原理…...
Python---练习:使用for循环实现用户名+密码认证
案例: 用for循环实现用户登录 ① 输入用户名和密码 ② 判断用户名和密码是否正确(usernamelaowang,passwordlw123) ③ 登录仅有三次机会,超过3次会报错 思考: 用户登陆情况有3种: ① 用户名错误(此时…...
react中使用jquery 语法
react中使用jquery 语法 npm install jquery引入 import $ from ‘jquery’ import React from react; import ./css/App.css import { Button } from antd; import $ from jquerylet slider_img [https://cdn.jsdelivr.net/gh/xaoxuu/cdn-wallpaper/abstract/41F215B9-261F…...
服务器中了360后缀勒索病毒怎么解决,勒索病毒解密,数据恢复
近期,网络上的各种病毒都比较猖獗,而其中较为明显的就是360后缀勒索病毒,从这个月开始云天数据恢复中心接到很多企业的求助,企业的服务器遭到了360后缀勒索病毒的攻击,通过给用户的服务器检测与加密病毒的分析…...
使用字节流读取文件中的数据的几种方式
public class FileReader02_ {public static void main(String[] args) {}Testpublic void m1() {String filePath "e:\\hello.txt";FileReader fileReader null;int date0;try {fileReader new FileReader(filePath);//循环读取 使用readwhile ((datefileReader.…...
Android WMS——概述(一)
Android 中的 WMS 指的是 Window Manager Service(窗口管理服务)。WMS 是 Android 系统中的核心服务,主要分为四大部分,分别是窗口管理,窗口动画,输入系统中转站和 Surface 管理 。负责管理应用程序窗口的创建、移动、调整大小和显示等操作。 一、功能简介 WMS 的职责可…...
C++与C混合编程:extern ‘C‘原理与实践指南
1. 揭开extern C的神秘面纱第一次看到extern C这个语法时,我和大多数C新手一样感到困惑。它看起来像是一个可有可无的修饰符,直到我在实际项目中踩了坑才明白它的重要性。记得那是一个跨平台的网络库项目,当我们尝试在C代码中调用一个C语言编…...
pe_to_shellcode测试验证:如何确保PE转换后的功能完整性
pe_to_shellcode测试验证:如何确保PE转换后的功能完整性 【免费下载链接】pe_to_shellcode Converts PE into a shellcode 项目地址: https://gitcode.com/gh_mirrors/pe/pe_to_shellcode pe_to_shellcode是一款专业的PE转shellcode工具,能够将可…...
Excel实战:手把手教你用条件格式和分类汇总分析个人开支(计算机二级考点全覆盖)
Excel实战:手把手教你用条件格式和分类汇总分析个人开支(计算机二级考点全覆盖) 在个人财务管理中,Excel是最基础也最强大的工具之一。无论是备考计算机二级的考生,还是希望提升工作效率的职场人士,掌握Exc…...
省考面试必看!初心教育不玩虚的,真实口碑+实战演练,上岸更稳
公考面试有多卷?千人争一岗,拼的不只是实力,更是选择!选对培训机构,能少走半年弯路;选不对,再努力也可能白费功夫 今天给所有进面考生避坑,推荐一家深耕公考面试多年、口碑拉满的宝藏…...
西交提出 OdysseyArena:让智能体真正“学会探索”的长程归纳推理基准
📌 一句话总结: 本工作提出 OdysseyArena,一个面向长时程(long-horizon)、主动探索(active)、归纳学习(inductive)三大核心能力的交互式评测平台,系统性检验…...
C语言字符串操作函数实现与优化技巧
1. 字符串操作函数的重要性与实现意义在C语言开发中,字符串操作是最基础也是最频繁使用的功能之一。标准库提供的字符串函数虽然可以直接调用,但理解其底层实现原理对开发者而言至关重要。这不仅能帮助我们在出现问题时快速定位,更能提升对内…...
爬虫对抗实战 - ZLibrary 反爬机制分析与突破
一、背景介绍1. 爬虫与反爬的永恒博弈网络爬虫的核心原理是通过程序模拟 HTTP/HTTPS 请求,获取网页数据并解析提取,广泛应用于数据采集、搜索引擎索引、数据分析等场景。网站部署反爬措施的核心必要性:保护服务器资源,避免恶意爬虫…...
看门狗悖论:对波普尔可证伪主义划界标准的归谬反驳
看门狗悖论:对波普尔可证伪主义划界标准的归谬反驳摘要卡尔・波普尔提出的可证伪性标准,被学界长期奉为科学与非科学的核心划界原则。该原则主张:一个命题若具备被经验事实反驳的逻辑可能,即可归入科学命题范畴。然而,…...
大功率H桥电机驱动板电路设计方案 - ir2103驱动芯片应用方案
大功率H桥电机驱动板电路设计方案 此大功率直流电机驱动板采用ir2103驱动芯片,可同时驱动两路电机,使用10m高速光耦对控制信号进行隔离,最大额定电流可达100A,方案包括:硬件原理图,PCB(可直接打样测试)&…...
商道融绿ESG评级实战指南:从数据获取到企业绿色转型效果验证
商道融绿ESG评级实战指南:从数据获取到企业绿色转型效果验证 当某制造业上市公司ESG负责人张总监第一次向董事会汇报绿色转型方案时,遭遇的质疑声至今记忆犹新:"这些环保投入真能带来实际效益吗?"直到他们运用商道融绿E…...
