所以说我有一个列表:
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))
,但这只会给我第一个索引。
任何提示?另外,我想坚持使用sort
,max
,len
等简单方法......
答案 0 :(得分:13)
您可以使用max
确定maxval
:
maxval = max(my_list)
然后使用enumerate
和list 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