如何在Python中找到列表中最大值的索引?

9

我有一个列表,需要找到列表中的最大元素并记录该最大元素所在的索引。

这是我的代码:

list_c = [-14, 7, -9, 2]

max_val = 0
idx_max = 0

for i in range(len(list_c)):
    if list_c[i] > max_val:
        max_val = list_c[i]
        idx_max = list_c.index(i)

return list_c, max_val, idx_max

请帮忙,我刚开始学习编程,在这里卡住了。


使用此 idx_max = list_c.index(list_c[i])。您正在尝试查找 i 的索引。它应该是 list_c[i] - Ram
未经测试:max(enumerate(list_c), key=lambda x: x[1]) - Klaus D.
请解释您期望的输出和实际接收到的输出是什么。还有,您希望使用这一行代码来做什么:idx_max = list_c.index(i) - Matthias
2
@Ram:如果您想将i的值赋给idx_max,那么idx_max = list_c.index(list_c[i])这样做就很奇怪。一个简单的idx_max = i即可。 - Matthias
@Matthias 是的。没错! - Ram
这个回答解决了你的问题吗?在列表中找到最大值及其索引的Pythonic方法? - VMMF
6个回答

6

最简单的方法是对整个列表应用逻辑。您可以使用max(list)获取列表的最大值,您也可以使用上面使用的相同的索引函数获取该数字在列表中的索引。

max_val = max(list_c)
idx_max = list_c.index(max_val)

如果您想循环遍历值以找到最大值,请注意以下内容:
  1. list.index(value) will find the index of that value in the list. In your case you are writing list.index(index_number) which doesnt make sense. 'i' already represents the list index, so just set idx_max = 'i'.

  2. Further, you should note that if you set max_val to zero, if all the list items are less than zero, it will stay at zero during the loop and never find the max value. It is better to start by setting max_val to the first item of the list ie list_c[0].

     list_c = [-14, 7, -9, 2]
    
     max_val = list_c[0]
     idx_max = 0
    
     for i in range(len(list_c)):
         if list_c[i] > max_val:
             max_val = list_c[i]
             idx_max = i
    

NB 'return' 是用于从函数中返回值的关键词,如果您想要打印这些值,请使用 print(list_c, max_val, idx_max)。


1

两次循环遍历数组效率低下。使用内置的enumerate()max(),并使用比较lambda表达式返回枚举的第二个元素:

>>> list_c = [-14, 7, -9, 2]
>>> print(max(enumerate(list_c), key=lambda x: x[1]))
(1, 7)

1
您可以通过将列表转换为NumPy数组来使用NumPy argmax()函数。
import numpy as np
list_c = [-14, 7, -9, 2]
print("Index max:",np.argmax(np.asarray(list_c)))
print("Value max:",list_c[np.argmax(np.asarray(list_c))])

最大索引:1

最大值:7


0

.index 只能在列表中的元素上执行。因此,执行 idx_max = list_c.index(list_c[i])

max_val = list_c[i]
idx_max = list_c.index(list_c[i])

然而,这里是一个简短的版本

list_c = [-14, 7, -9, 2]
print(max(list_c),list_c.index(max(list_c)))

0
  • 你正在尝试找到i的索引。它应该是list_c[i]

更简单/更好的方法是:idx_max = i。(基于上面@Matthias的评论。)

  • 使用print打印结果,而不是return。你在函数内使用return
  • 此外,如果list_c具有所有负值,则您的代码无法正常工作,因为您将max_val设置为0。您总是得到一个0。
list_c = [-14, 7, -9, 2]

max_val = 0
idx_max = 0

for i in range(len(list_c)):
    if list_c[i] > max_val:
        max_val = list_c[i]
        idx_max = i

print(list_c, max_val, idx_max)


[-14, 7, -9, 2] 7 1

-1

1
请提供您的代码以及一些关于代码的描述! - imxitiz
1
在Stack Overflow上,我们想创建一个解决方案数据库。仅提供链接的答案对此没有帮助,因为链接可能会失效。 - Klaus D.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接