我有一个清单:
a = [32, 37, 28, 30, 37, 25, 27, 24, 35, 55, 23, 31, 55, 21, 40, 18, 50,
35, 41, 49, 37, 19, 40, 41, 31]
最大元素是55(两个元素在位置9和12)
我需要找到在哪个位置(s)的最大值是位于。请帮助。
我有一个清单:
a = [32, 37, 28, 30, 37, 25, 27, 24, 35, 55, 23, 31, 55, 21, 40, 18, 50,
35, 41, 49, 37, 19, 40, 41, 31]
最大元素是55(两个元素在位置9和12)
我需要找到在哪个位置(s)的最大值是位于。请帮助。
当前回答
我想到了以下,它的工作原理,你可以看到max, min和其他函数的列表,像这样:
那么,请考虑下面的例子列表找出最大值在列表中的位置a:
>>> a = [3,2,1, 4,5]
使用生成器枚举并进行强制转换
>>> list(enumerate(a))
[(0, 3), (1, 2), (2, 1), (3, 4), (4, 5)]
此时,我们可以提取max的位置
>>> max(enumerate(a), key=(lambda x: x[1]))
(4, 5)
上面告诉我们,最大值在位置4,他的值是5。
如您所见,在key参数中,您可以通过定义适当的lambda来找到任何可迭代对象的最大值。
我希望它能有所帮助。
PD:正如@PaulOyster在评论中指出的那样。使用Python 3。x的min和max允许一个新的关键字default,避免引发异常ValueError当参数是空列表。Max (enumerate(list), key=(lambda x:x[1]), default = -1)
其他回答
这段代码不像之前发布的答案那么复杂,但它可以工作:
m = max(a)
n = 0 # frequency of max (a)
for number in a :
if number == m :
n = n + 1
ilist = [None] * n # a list containing index values of maximum number in list a.
ilistindex = 0
aindex = 0 # required index value.
for number in a :
if number == m :
ilist[ilistindex] = aindex
ilistindex = ilistindex + 1
aindex = aindex + 1
print ilist
上面代码中的Ilist将包含列表中最大数目的所有位置。
还有一个解决方案,只给出第一个外观,可以通过使用numpy实现:
>>> import numpy as np
>>> a_np = np.array(a)
>>> np.argmax(a_np)
9
只有一句话:
idx = max(range(len(a)), key = lambda i: a[i])
你也可以使用numpy包:
import numpy as np
A = np.array(a)
maximum_indices = np.where(A==max(a))
这将返回包含max值的所有下标的numpy数组
如果你想把它变成一个列表:
maximum_indices_list = maximum_indices.tolist()
>>> max(enumerate([1,2,3,32,1,5,7,9]),key=lambda x: x[1])
>>> (3, 32)