python - 给定 if 语句如何优化 if 语句:> 或 <
问题描述
如何使类似于下面的代码运行得更快。
我知道您可以将字典用于相等的 if 语句,但不确定是否使用这个。
Delta = 3
if (x - y) >= Delta:
pass
elif y < Delta:
pass
else:
pass
解决方案
这是一个字典查找的示例,如果您真的想使用一个:
def do_something():
pass
def do_something_else_1():
pass
def do_something_else_2():
pass
{
y < Delta: do_something_else_1,
x - y >= Delta: do_something
}.get(True, do_something_else_2)()
但我可以向你保证,这会运行得更慢(主要是因为现在所有条件都被贪婪地评估,而不是懒惰地评估)。您无法使用字典查找优化现有代码的原因是字典查找擅长计算哈希,然后计算与缩小的搜索空间的相等性比计算与整个搜索空间的相等性更快。由于这个好处,您必须首先支付构建哈希表的前期成本。
但是,您没有在这里检查相等性。您正在使用不等式函数<
和>=
,这与哈希表的概念不符。与使用 a 本身相比,a 的哈希bool
(此不等式函数的结果)的计算速度并不快bool
,这意味着在此处构造哈希表将超过之后立即使用构造的哈希表所节省的时间。由于每次x
都y
可能发生变化,因此您无法缓存此哈希表,这意味着您每次都要承受构建成本。
保持代码不变。
推荐阅读
- javascript - 如何将 JQuery Validation 与 JQuery 多选插件一起使用
- java - 使用 Java 进行数据迁移
- llvm - LLVM 6.0.0 HowToUseJit 示例程序段错误
- java - {“readyState”:0,“status”:0,“statusText”:“NetworkError:无法在'XMLHttpRequest'上执行'send':无法加载'http://localhost:8088/'。” }
- java - Intent.ACTION_SEND 针对 API 级别 24+
- java - 使用 FragmentPagerAdapter 从主 Activity 调用 Fragment 方法
- c# - 如何正确将位图 RGB 颜色转换为二维双数组?
- android - 如何让我的手机接受更多指纹
- android - android:片段中的嵌套滚动视图抛出异常
- mysql - 当我的应用什么都不做时,为什么我的 Google Cloud SQL (MySQL) 基础每秒会收到多个请求(写入)?