关于 Python 中集合的遍历效率的问题

2017-07-25 10:30:32 +08:00
 shayuvpn0001

最近在看 Python,有一个问题想请教一下各位:

使用以下几种方式遍历一个集合的时候,哪个效率更高?
下面 myList 是一个 list,
1,使用 for each in myList
2,使用 for idx, val in enumerate(myList)
3,使用 for i in range(0, len(myList))

此外,我个人理解的是 3 是属于有序遍历,如果中间缺少一个元素,则可能返回为空或者异常。而 1,2 都不会有这个问题。比如 myList 可能会有元素增减,如果增减发生在中间部分,方法 3 是不是可能产生异常?

刚刚上手,希望各位多指导。谢谢~

2922 次点击
所在节点    程序员
7 条回复
jmc891205
2017-07-25 10:57:48 +08:00
集合是 set 你在问的是列表 list

不管怎么遍历 list 都是 O(n) 这是数据结构决定的 不以语法糖为转移

遍历的时候不要修改你在遍历的 list 可以另建一个 list 把你需要的 list 存进去
binfengxy
2017-07-25 11:10:08 +08:00
for each in myList
用最基础的吧,好像 python3+都在底层做了处理
liuminghao233
2017-07-25 11:16:01 +08:00
遍历的效率还有区别的吗 23333
princelai
2017-07-25 12:00:26 +08:00
听说推导式比 for 高效一点,前提是 for 里的处理不那么复杂
princelai
2017-07-25 12:07:10 +08:00
另外如果你只是加减乘除,且数据足够大,为何不用 numpy,广播操作和 ufunc 效率极高,当然你也可以 numba 手动优化
cloudyplain
2017-07-25 16:24:16 +08:00
cython 推荐使用 3,其他应该都差不多,可以看看生成的字节码
vTexEZDota
2017-07-25 19:17:56 +08:00
前面两个是通过迭代器遍历,速度快一点。List 在遍历的时候不可以修改长度。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/377748

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX