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

时间:2014-02-18 17:57:39

标签: python list sorting indexing max

所以说我有一个列表:

my_list = [12, 13, 51, 21, 22, 58, 45.1, 34.2, 56, 6, 58, 58] 

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

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

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

任何提示?另外,我想坚持使用sortmaxlen等简单方法......

4 个答案:

答案 0 :(得分:13)

您可以使用max确定maxval

maxval = max(my_list)

然后使用enumeratelist comprehension

获取索引
indices = [index for index, val in enumerate(my_list) if val == maxval]

对于你的例子,我得到了

maxval == 58
indices = [5, 10, 11]

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

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)

答案 1 :(得分:1)

类似于枚举和列出理解,您也可以使用过滤器:

maxval = max(my_list)
indices = list(filter(lambda x: my_list[x]==maxval, list(range(len(my_list)))))

答案 2 :(得分:0)

我试图尽可能采用最恐怖的方式

my_list = [12, 13, 51, 21, 22, 58, 45.1, 34.2, 56, 6, 58, 58] 
max_indices = [i for i in range(len(my_list)) if my_list[i] == max(my_list)]

编辑: Ashwini是对的。 max()需要在列表之外,所以......

max_value = max(my_list)
max_indices = [i for i in range(len(my_list)) if my_list[i] == max_value]

答案 3 :(得分:-1)

枚举将帮助您获取价值和位置

maxx = max(my_list)
for i,j in enumerate(my_list):
    if j == maxx:
        print i,j

输出

5 58

10 58

11 58