如何找到列表中最大值的所有位置?

217 投票
18 回答
453285 浏览
提问于 2025-04-16 05:52

我有一个列表:

a = [32, 37, 28, 30, 37, 25, 27, 24, 35, 55, 23, 31, 55, 21, 40, 18, 50,
             35, 41, 49, 37, 19, 40, 41, 31]

最大值是55(在第9和第12个位置上各有一个元素是55)

我需要找出最大值所在的位置。请帮帮我。

18 个回答

22

这个选择的答案(还有其他大部分答案)都需要对列表进行至少两次遍历。
这里有一个只需一次遍历的解决方案,可能更适合处理较长的列表。

编辑:为了回应@John Machin指出的两个不足之处。对于第二个问题,我尝试根据每种情况出现的概率进行优化,并利用前面的结果进行推断。找出max_valmax_indices的合适初始化值有点棘手,尤其是在最大值恰好是列表中的第一个值时——但我相信现在已经解决了这个问题。

def maxelements(seq):
    ''' Return list of position(s) of largest element '''
    max_indices = []
    if seq:
        max_val = seq[0]
        for i,val in ((i,val) for i,val in enumerate(seq) if val >= max_val):
            if val == max_val:
                max_indices.append(i)
            else:
                max_val = val
                max_indices = [i]

    return max_indices
377
a.index(max(a))

这段话的意思是,它会告诉你列表 a 中最大值元素第一次出现的位置。

261
>>> m = max(a)
>>> [i for i, j in enumerate(a) if j == m]
[9, 12]

当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。

撰写回答