最近在看 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 是不是可能产生异常?
刚刚上手,希望各位多指导。谢谢~
1
jmc891205 2017 年 7 月 25 日
集合是 set 你在问的是列表 list
不管怎么遍历 list 都是 O(n) 这是数据结构决定的 不以语法糖为转移 遍历的时候不要修改你在遍历的 list 可以另建一个 list 把你需要的 list 存进去 |
2
v166ex 2017 年 7 月 25 日
for each in myList
用最基础的吧,好像 python3+都在底层做了处理 |
3
liuminghao233 2017 年 7 月 25 日 via iPhone
遍历的效率还有区别的吗 23333
|
4
princelai 2017 年 7 月 25 日 via Android
听说推导式比 for 高效一点,前提是 for 里的处理不那么复杂
|
5
princelai 2017 年 7 月 25 日 via Android
另外如果你只是加减乘除,且数据足够大,为何不用 numpy,广播操作和 ufunc 效率极高,当然你也可以 numba 手动优化
|
6
cloudyplain 2017 年 7 月 25 日
cython 推荐使用 3,其他应该都差不多,可以看看生成的字节码
|
7
vTexEZDota 2017 年 7 月 25 日
前面两个是通过迭代器遍历,速度快一点。List 在遍历的时候不可以修改长度。
|