列表优化中最大值指标的确定

2024-05-19 00:21:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经写了几行代码来解决这个问题,但是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?你知道吗


Tags: 代码inforifiswithsomeelements
3条回答

你说这是一个耗时的操作,但我真诚地怀疑这是否会影响你的程序。你真的发现这是由于你的代码执行缓慢而导致的问题吗?如果没有,优化就没有意义。你知道吗

这就是说,我可以想到一个小的优化-那就是使用set而不是list理解max_where。这将使你的三个成员测试更快。你知道吗

max_where = {i for i, j in enumerate(comp) if j == m}

这就是说,只有三个项目/检查,建设集可能需要更多的时间比它节省。你知道吗

一般来说,对于一个包含三个项目的列表,此操作所需的时间可以忽略不计。在我的系统上,执行这个操作需要半微秒。你知道吗

简而言之:不用麻烦。除非这是程序中的瓶颈,需要加快速度,否则您当前的代码就可以了。你知道吗

如果您多次这样做,并且如果您同时拥有所有可用的列表,那么您可以numpy.argmaxmake use来获取所有列表的索引。你知道吗

如果总是三个元素,为什么不简单地做:

comp = [1, 2, 3] 
m = max(comp)

if comp[0] == m: 
    some action
if comp[1] == m: 
    some action
if comp[2] == m: 
    some action

相关问题 更多 >

    热门问题