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 没用的,绝对是负优化。
之前发过一篇帖子: 你们不觉得产品经理这活,应该由程序员自己亲自干吗? 当时我主张程序员要做产品,现在我更主张了。 我看 V 站有许多程序员朋友担心 AI 太强大,担心自己作为…
ui 看着有点粗糙 系统动画很不优雅,傻慢 没看到游戏助手,就是可以录制触摸路径,然后自动跳过米游对话的。 自动亮度有点傻,得手动 本人手持 iPhone 15 pm 和 …
小米、华为、oppo 、vivio...哪家系统好用? 广告少 系统流畅 个性化服务 我不说哪一家,因为说了肯定被喷。但是我想你已经知道我说的哪个了 单论系统,广告这些,…