我有一个清单:

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)

其他回答

这里是最大值和它出现的索引:

>>> from collections import defaultdict
>>> d = defaultdict(list)
>>> 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]
>>> for i, x in enumerate(a):
...     d[x].append(i)
... 
>>> k = max(d.keys())
>>> print k, d[k]
55 [9, 12]

后来:为了满足@SilentGhost

>>> from itertools import takewhile
>>> import heapq
>>> 
>>> def popper(heap):
...     while heap:
...         yield heapq.heappop(heap)
... 
>>> 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]
>>> h = [(-x, i) for i, x in enumerate(a)]
>>> heapq.heapify(h)
>>> 
>>> largest = heapq.heappop(h)
>>> indexes = [largest[1]] + [x[1] for x in takewhile(lambda large: large[0] == largest[0], popper(h))]
>>> print -largest[0], indexes
55 [9, 12]

类似的想法与列表理解,但没有枚举

m = max(a)
[i for i in range(len(a)) if a[i] == m]

只有一句话:

idx = max(range(len(a)), key = lambda i: a[i])
a.index(max(a))

会告诉你列表a中值最大的元素的第一个实例的索引。

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]

import pandas as pd

pd.Series(a).idxmax()

9

我通常都是这么做的。