如何在列表中查找多个最大值项

时间:2014-02-19 22:21:01

标签: python list indexing

我正在试图找出如何获取整数列表并将该列表中的所有项目返回到另一个列表作为其最大值,但是使用它们的索引。

所以我需要能够在不使用枚举,lambda,numpy或任何类似的东西的情况下执行此操作。它必须是列表的基本方法。基本上,像append,max等。 。 如果声明也很好。

为了澄清我想要做的事情,请说我有一个清单:[4, 34, 0, 0, 6, 34, 1] 我希望它返回[1, 5]

3 个答案:

答案 0 :(得分:4)

最简单的方法:

in [24]: a = [4, 34, 0, 0, 6, 34, 1]

In [25]: j=0

In [26]: M=[]

In [27]: m = max(a)

In [28]: for i in a:
    if i==m:
        M.append(j)
    j+=1
   ....:     

In [29]: M
Out[29]: [1, 5]

使用list-comprehension和enumerate,可以将上述内容缩短为:

In [30]: [i for i, x in enumerate(a) if x == max(a)]
Out[30]: [1, 5]

答案 1 :(得分:1)

“完全手动”方法,不使用那些讨厌的标准库函数:

def get_max_indices(vals):
    maxval = None
    index = 0
    indices = []
    while True:
        try:
            val = vals[index]
        except IndexError:
            return indices
        else:
            if maxval is None or val > maxval:
                indices = [index]
                maxval = val
            elif val == maxval:
                indices.append(index)
            index = index + 1

它在简洁中失去了什么,它获得了......并不多。

答案 2 :(得分:0)

有更好的方法,但如果你真的想让它变得更难......

max_val = max(funny_list)
i = 0
ind = []
for val in funny_list:
    if val == max_val:
        ind.append(i)
    i = i + 1