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