我已经写了几行代码来解决这个问题,但是profiler说,这非常耗时。(使用逐行探查器) 代码如下:
comp = [1, 2, 3] #comp is list with always 3 elements, values 1, 2, 3 are just for illustration
m = max(comp)
max_where = [i for i, j in enumerate(comp) if j == m]
if 0 in max_where:
some action1
if 1 in max_where:
some action2
if 2 in max_where:
some action3
Profiler说,大部分时间都消耗在max\u where计算中。我也曾尝试将此计算拆分为if树,以避免一些不必要的操作,但结果并不令人满意。你知道吗
拜托,我是做错了还是只是Python?你知道吗
你说这是一个耗时的操作,但我真诚地怀疑这是否会影响你的程序。你真的发现这是由于你的代码执行缓慢而导致的问题吗?如果没有,优化就没有意义。你知道吗
这就是说,我可以想到一个小的优化-那就是使用
set
而不是list
理解max_where
。这将使你的三个成员测试更快。你知道吗这就是说,只有三个项目/检查,建设集可能需要更多的时间比它节省。你知道吗
一般来说,对于一个包含三个项目的列表,此操作所需的时间可以忽略不计。在我的系统上,执行这个操作需要半微秒。你知道吗
简而言之:不用麻烦。除非这是程序中的瓶颈,需要加快速度,否则您当前的代码就可以了。你知道吗
如果您多次这样做,并且如果您同时拥有所有可用的列表,那么您可以
numpy.argmax
的make use来获取所有列表的索引。你知道吗如果总是三个元素,为什么不简单地做:
相关问题 更多 >
编程相关推荐