Python 多层 for 循环性能如何提高
在实际业务中不得不遍历多个嵌套 for 循环, 如何提高嵌套 for 循环的性能 耗时太长了~
案例:
比如一把武器
for 一个武器 in 武器库:
for 弹药 in 弹夹:
if 弹药是否属于该武器:
for 弹药属性 in 弹药:
# 判断弹药是否支持攻击某种物体
提前用字典存好
提前存好 +1
最朴素的方法往往是最有效的
空间换时间
请问 while 循环的间隔是 0.2s-0.3s 左右,有方法可以减少吗?
把多层循环的内容根据逻辑改写难易丢 numpy 、丢 pandas 、丢数据库,最不济丢其他性能高的语言去处理呗
像你题目中说的,感觉用一个 df.apply 就能解决,前提是 merge 上必要的信息列
同意 #1
- 种类不多,你可以存成
set[tuple[弹药, 该弹药能攻击的物体]]
:
弹药能攻击的物体 = {
(弹药 1, 物体 1),
(弹药 1, 物体 2),
(弹药 2, 物体 1),
(弹药 2, 物体 3),
}
判断:if (弹药 1, 物体 1) in 弹药能攻击的物体:
- 种类巨多,可能存成
dict[弹药, set[该弹药能攻击的物体]]
能省点内存?但比上面的慢
弹药能攻击的物体 = {
弹药 1: {物体 1, 物体 2},
弹药 2: {物体 1, 物体 3},
}
判断:if 物体 1 in 弹药能攻击的物体[弹药 1]:
用二维数据结构组织既有信息
也就是楼上说的用 map 或者 dict 来做
思路一:修改逻辑, 不要用 for 循环
思路二:实在要用 for ,改成 C/C++循环, 可以使用 mypyc 编译该部分代码, 也可以用 cython 编译。mypyc 有语法要求, 性能稍微好一点。cython 可以直接编,性能比较差,但是还是远比 Python for 循环好
我们团队搞了一个专门为 Python 业务逻辑加速的编译器,性能吊打 cython/mypyc/pypy , 可惜不能开源.......
map reduce ?
github.com/Suzhou-Tongyuan/jnumpy 写扩展
numba
#11 numba 不支持 list 结构,他这个 for in 明显是从序列中遍历呢,这个方法不行
用空间换时间,这是最简单的一个算法技巧
有思路了!感谢大佬!
多刷 leetcode
手动展开
长列表遍历本来就慢, python 的循环更是慢中慢...
提前分类, 字典存好比较好
当然是直接换 python 14
python14!
全组合放数据库,直接查结果就行。
这种情况,numba 没用的,绝对是负优化。
各位 vimer ,你们在 insert mode 输入时候是怎么快速前进一个字符的? 如果退出 insert mode ,按 A 可以做到,但感觉好麻烦。 如果是在别的地方,…
这些最为奇怪的程序语言的特性,来自stackoverflow.com,原贴在这里。我摘选了一些例子,的确是比较怪异,让我们一个一个来看看。 1、C语言中的数组 在C/C++…
需求背景 1 、主业 java 后端开发,项目空窗期比较多 2 、想再掌握一点前端开发技能,不敢说可以单独开发、有些 bug 或者前端功能可以自己独立上手处理 3 、目前项目中…