我有以下列表:获取具有相同的最高值的最后索引列表
a = [100, 34, 2, 100]
我想最大价值的指标:
$ a.index(max(a))
Returns: 0
什么是获得的Python的方式在这种情况下最后一个索引(具有最大值)3
。
(由于最大值重复多次)。
我有以下列表:获取具有相同的最高值的最后索引列表
a = [100, 34, 2, 100]
我想最大价值的指标:
$ a.index(max(a))
Returns: 0
什么是获得的Python的方式在这种情况下最后一个索引(具有最大值)3
。
(由于最大值重复多次)。
我认为这可能适合你。
len(a) - a[::-1].index(max(a)) - 1
a[::-1]
是Python的方式扭转列表,然后index
功能会发现“第一”时间max(a)
发生在逆转名单,这将是它在原来的列表中出现的最后一次。
另一种方式来做到这一点可能是:
def last_max_index2(s):
m_index = m = None
for i, elem in enumerate(s):
if elem >= m:
m, m_index = elem, i
return m_index
last_max_index2
有它计算最大的优势不言而喻,因此只需要一个合格的阵列上。但它更像是用C++或Java编写的算法,在Python中则更少。通常这是正确的:依赖内置插件的较短方式更好。
然而,我认为这是比使用reduce
或任何溶液的单衬垫与enumerate
和键与lambda表达式一个得多更可读的和直观的方法。这些解决方案只有非常熟悉的Python程序员才能理解。
而且在评论中这样的一个解决方案是非常模糊:
last_max_index3 = lambda s: max((x, i) for i, x in enumerate(s))[1]
我知道熟悉Python会不同意大多数人,但我认为这个代码是如此错误方向为Python初学者,它实际上有害这样做,不管单线性,使用enumerate
,以及输入少量字符。
FWIW,这是另一种选择。我敢说比接受的答案更Python
max(reversed(xrange(len(a))), key=a.__getitem__)
不知道,这是很符合Python:
l = [100, 34, 2, 100]
>>> reduce(lambda m, p: p if p[1]>=m[1] else m, enumerate(l))
(3, 100)
'MAX((X,I)为I,X在枚举(一))[1 ]' – falsetru