字典和列表性能哪家强,让我用一百万随机字符来为你揭晓!

Python中有两个非常常用的数据结构,列表和字典。在做数据存储的时候,到底二者哪家强,字典还是列表,还是差不多呢。与其猜测,不如我们用数据说话!

思路:

生成一个很大的文本文件
分别用列表和字典来存储数据,然后读取并搜索数据
考察列表和字典做为数据结构的时候,存储的时间,搜索和访问的时间
计算两种方案的消耗时间
1.创建百万字符文件

我们需要一个较大的文件,来证明我们的猜想!干脆直接生成一个有百万行的字符串乱码文件。

1).产生一串随机字符:

取一些随机的字符,包括数字,字符,标点和符号等等,一共95个随机字符。

2).把字符序列,进行随机化分布

def create_random_nums(nums=None):

random.shuffle(nums)

return nums

直接用random模块,把字符串序列随机化.

3).随机100万行的字符序列,写入文件

def create_file():

chars=get_random_chars()

for i in range(1000000):

with open(‘data.txt‘,‘at‘) as f:

data=create_random_nums(chars)

f.writelines(data)

f.write(‘ ‘)

用个大循环把随机的字符串写入文件中,大概有一百万行,文件大小在100M左右,这里只是试例代码,其实可以用并发写更快一点。

2.用列表做数据结构

先从百万行随机字符串文件中,读取一定数量的数据(10000行数据),
存入10000行放入all_data列表
接着从10000行all_data列表里面随机取1000行
放到一个target_data列表
最后搜索这个target_data列表
3.用字典做数据结构

我们用相同的场景,用字典作为数据结构容器,从百万文件中来读取数据。

考察字典的存储数据的时间,以及字典中的搜索数据的时间。


先从百万行字符串文件中,读取一定数量的字符(假如为10000行)
存到到字典里面,把每一行做为key
接着提取这个字典里面的key,把这个10000行的数据,转为列表
从10000行里面随机取1000行出来,放到target_data列表
4.计算运行时间

我们计算两种数据结构运行的时间,为了更准确。我们运行100次求均值

看一下用列表消耗的时间:

all_data, target_data = read_list_data(file_name, 100000, 1000)

cost=cost_time(all_data,target_data)

print (cost)

>0.09532666921615601秒

看一些用字典消耗的时间:

all_data, target_data = read_dict_data(file_name, 100000, 1000)

cost=cost_time(all_data,target_data)

print (cost)

>0.00016084909439086914秒

字典的性能是列表的600倍,可见字典作为数据结构,会快快快很多!尤其是非常大的数据存储和读取的时候。

既然字典这么快,那么线性增加搜索,看看耗时如何,刚才是1×××面搜1千,现在我们从二十万搜1千看看,1百×××面搜1千看看。

all_data, target_data = read_dict_data(file_name, 200000, 1000)

cost=cost_time(all_data,target_data)

print (cost)

>0.00014181852340698243

all_data, target_data = read_dict_data(file_name, 1000000, 1000)

cost=cost_time(all_data,target_data)

print (cost)

>0.00022308111190795897

发现消耗的时间差不多

结论:

为啥字典性能比列表快这么多?这要从字典和列表的原理说起,字典其实是散列表或者说是哈希表!内部存储的时候是根据hash地址来搜索的,搜索的时候不需要从头开始搜索,这也就是为啥哈希表变大,20万和100万的查询的速度差不多!

而列表是什么,Python列表是一种顺序线性表,好处是插入,移除比较快速,但是搜索会慢很多!

综上所述,由于Python中字典的性能远高于列表,Python源码中很多底层的对象都是用字典类型,只要重载hash魔法函数,让它返回一个可哈希的对象,这样的对象就可以用做字典的key。小伙伴今天是不是又学到一招!

文章地步为你有准备Python零基础flask教程,点解链接进入就能了解:Python flask零基础教程

原文地址:http://blog.51cto.com/13719825/2147108

时间: 2024-10-10 20:39:12

字典和列表性能哪家强,让我用一百万随机字符来为你揭晓!的相关文章

推送技术哪家强?

各位看官, 目前我家App的推送功能在Android平台一直表现不佳,目前有3家名气还不错的推送单位待选. 个推(杭州本土企业,推送行业里历史悠久) 极光(号称中国最大推送平台) 友盟(一个做统计起家的后起之秀) 个个都吹的好牛逼,在下表示好迷茫. 到底哪家强?咱们不妨都拉出来做几组测试来看下 首先,我们来做一下以下3种场景的测试. 1.App至于前台进行推送测试. 2.App切到后台但不锁屏进行推送测试. 3.App切到后台切锁屏5分钟后进行推送测试. 测试机器: 1. 小米max Andro

.NET ORM 哪家强

ORM到底哪家强? 很多人都想知道这个问题,自已也没测试过,只能道听途说. 闲的无聊就将几个ORM拿出来比一比,假如怀疑测试代码有问题可以将它下载下来慢慢研究. 参赛ORM 1.SqlSugar:是一款轻量级的MSSQL ORM ,除了具有媲美ADO的性能外还具有和EF相似简单易用的语法,地址:http://www.cnblogs.com/sunkaixuan/p/5654695.html 2.Chloe ORM: 模仿EF代码风格与设计的一款轻量级高性能ORM ,地址:http://www.c

深度学习框架哪家强:TensorFlow?Caffe?MXNet?Keras?PyTorch?

深度学习框架哪家强:TensorFlow?Caffe?MXNet?Keras?PyTorch?对于这几大框架在运行各项深度任务时的性能差异如何,各位读者不免会有所好奇. 微软数据科学家Ilia Karmanov最新测试的结果显示,亚马逊MXNet在CNN.RNN与NLP情感分析任务上性能强劲,而TensorFlow仅擅长于特征提取. 测试详情更新在Ilia Karmanov的GitHub项目DeepLearningFrameworks(https://github.com/ilkarman/De

第一期 花式自适应网页哪家强? 就选你啦

咳咳. 麦克风测试ok... 那么第一届会议开始 ... 这次会议主题是手机web一些老生常谈的自适应问题.因为每个手机的系统不一样 大小也不一样 每个网页的排版也不一样.这个问题至今都还没有个正确的解 但这是入门手机端网页的必须跨过的一道墙. 那么究竟怎么解决这个问题了 今天我有幸请了6位选手解答 大家可以参考参考 这里我们以640px的设计稿为例 不知道这是什么请问美术gg 请用chrome手机游览器模式 游览选手连接 ------------------------------------

挖掘机技术哪家强(c++实现)

描述:为了用事实说明挖掘机技术到底哪家强,组织一场挖掘机技能大赛.现请你根据比赛结果统计出技术最强的那个学校. 输入:输入在第1行给出不超过105的正整数N,即参赛人数.随后N行,每行给出一位参赛者的信息和成绩,包括其所代表的学校的编号(从1开始连续编号).及其比赛成绩(百分制),中间以空格分隔. 输出:在一行中给出总得分最高的学校的编号.及其总分,中间以空格分隔.题目保证答案唯一,没有并列. input: 6 3 65 2 80 1 100 2 70 3 40 3 0 output: 2 15

自然语言处理哪家强?

自然语言处理哪家强? 摘要:语音交互事关未来,这点从大公司收购.投资.合作不断,就可见一斑.如苹果收购Siri.Novauris.Google收购多项语音识别技术专利.Facebook收购Wit.ai等.Amazon收购Yap--目前,基本上所有的巨头都有涉足. 语音交互事关未来,国内外已经不少公司在抢蛋糕了,大公司收购.投资.合作不断,就可见一斑.目前,基本上所有的巨头都有涉足. 苹果收购Siri.Novauris,组建基于神经网络算法的语音识别团队 2014 年7月,有消息称,苹果正在联系多

STM32的Cortex-M3核与ARM7有何区别?哪个性能更强?

STM32的Cortex-M3核与ARM7有何区别?哪个性能更强?,布布扣,bubuko.com

内容哪家强 小米乐视隔空开战针锋相对

"我们的内容是友商的两倍."当小米创始人雷军作出这一表态的时候,不知他是否能想到这会引发一场热闹的大战.这两天,围绕视频内容哪家强的问题,小米和乐视的论战针锋相对,成了眼前互联网行业最热闹的事件. ■小米开炮 视频内容两倍于乐视 6月10日,在小米公布其视频内容投资进展的发布会上,雷军出人意料地公布了一些对比数据:在小米电视上,电影总量是友商的2.4倍:电视剧总量是友商的1.4倍,所有内容总量是友商的两倍.在手机客户端上,内容总量是友商的3.5倍. 雷军还表示,小米用10亿美元的投资构

百度 谷歌 Twitter,这么多短链接服务(Short Url)到底哪家强?

一.短链接是什么 短链接,通俗来说,就是将长的URL网址,通过程序计算等方式,转换为简短的网址字符串. 它的原理也非常简单,就是采用 Domain Redirect(域名重定向) ,将一个域名自动跳转到另一个域名. 根据wikipedia描述,短链接的方案最早在2000年诞生.在2009年11月,著名短链接服务提供商Bitly的访问量是21亿,可见短链接的使用需求是非常大的. 维基地址 而在国内,短链接的普及与微博息息相关. 最早是由新浪仿照Twitter的140短篇博文功能,上线了新浪微博,之