Python:迭代列表与dict项目效率
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python:迭代列表与dict项目效率,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1904字,纯文字阅读大概需要3分钟。
内容图文
![Python:迭代列表与dict项目效率](/upload/InfoBanner/zyjiaocheng/709/7aca828cfc9c4b06b014a9442013a67c.jpg)
迭代some_dict.items()与迭代CPython中相同项的列表一样有效吗?
解决方法:
这取决于您使用的是哪个版本的Python.在Python 2中,some_dict.items()创建一个新列表,这会占用一些额外的时间并占用额外的内存.另一方面,一旦创建了列表,它就是一个列表,因此在列表创建的开销完成后应具有相同的性能特征.
在Python 3中,some_dict.items()创建了一个视图对象而不是列表,我预计创建和迭代items()会比在Python 2中更快,因为没有必要复制.但是我也期望迭代已经创建的视图比在已经创建的列表上迭代要慢一点,因为字典数据的存储有点稀疏,我相信python没有好办法避免迭代每个bin.字典 – 甚至是空字典.
在Python 2中,一些时间证实了我的直觉:
>>> some_dict = dict(zip(xrange(1000), reversed(xrange(1000))))
>>> some_list = zip(xrange(1000), xrange(1000))
>>> %timeit for t in some_list: t
10000 loops, best of 3: 25.6 us per loop
>>> %timeit for t in some_dict.items(): t
10000 loops, best of 3: 57.3 us per loop
对项目进行迭代的速度大约是其两倍.使用iteritems要快一点……
>>> %timeit for t in some_dict.iteritems(): t
10000 loops, best of 3: 41.3 us per loop
但迭代列表本身与迭代任何其他列表基本相同:
>>> some_dict_list = some_dict.items()
>>> %timeit for t in some_dict_list: t
10000 loops, best of 3: 26.1 us per loop
Python 3可以比Python 2更快地创建和迭代项目(与上面的57.3我们相比):
>>> some_dict = dict(zip(range(1000), reversed(range(1000))))
>>> %timeit for t in some_dict.items(): t
10000 loops, best of 3: 33.4 us per loop
但创建视图的时间是可以忽略不计的;迭代实际上比列表慢.
>>> some_list = list(zip(range(1000), reversed(range(1000))))
>>> some_dict_view = some_dict.items()
>>> %timeit for t in some_list: t
10000 loops, best of 3: 18.6 us per loop
>>> %timeit for t in some_dict_view: t
10000 loops, best of 3: 33.3 us per loop
这意味着在Python 3中,如果要对字典中的项进行多次迭代,并且性能至关重要,则可以通过将视图缓存为列表来获得30%的加速.
>>> some_list = list(some_dict_view)
>>> %timeit for t in some_list: t
100000 loops, best of 3: 18.6 us per loop
内容总结
以上是互联网集市为您收集整理的Python:迭代列表与dict项目效率全部内容,希望文章能够帮你解决Python:迭代列表与dict项目效率所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。