如何在带有数字的列表中查找最大数量

use*_*536 8 python sorting indexing list max

所以说我有一个列表:

my_list = [12, 13, 51, 21, 22, 58, 45.1, 34.2, 56, 6, 58, 58] 
Run Code Online (Sandbox Code Playgroud)

所以这个中的最大数字显然是58,但我不只想返回一个 58,我想要一个包含最大数量的所有索引的列表.

基本上我想要结果 [5, 10, 11]

我知道,如果我想要最大数量,我可以做,my_list.index(max(my_list))但这只会给我第一个索引.

有小费吗?另外,我想坚持简单的方法,如sort,max,len,等...

jon*_*rpe 17

您可以确定maxvalmax:

maxval = max(my_list)
Run Code Online (Sandbox Code Playgroud)

然后使用索引enumerate列表理解:

indices = [index for index, val in enumerate(my_list) if val == maxval]
Run Code Online (Sandbox Code Playgroud)

以你为榜样,我明白了

maxval == 58
indices = [5, 10, 11]
Run Code Online (Sandbox Code Playgroud)

根据Keyser的建议,你可以通过以下方式保存迭代列表两次(一次确定maxval,一次查找匹配的indexes):

maxval = None
for index, val in enumerate(my_list):
    if maxval is None or val > maxval:
        indices = [index]
        maxval = val
    elif val == maxval:
        indices.append(index)
Run Code Online (Sandbox Code Playgroud)

  • 或者,用一些内存替换运行时,遍历列表一次并以某种方式跟踪迄今为止最大的索引。我没有任何pythonic。 (2认同)