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