我有以下清单:
a = [100, 34, 2, 100]
Run Code Online (Sandbox Code Playgroud)
我想要最大的索引值:
$ a.index(max(a))
Returns: 0
Run Code Online (Sandbox Code Playgroud)
什么是在这种情况下获得的最后一个索引(具有最大值)的Python的方式3。
(因为最大值重复多次。)
我认为这可能对您有用。
len(a) - a[::-1].index(max(a)) - 1
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
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]
Run Code Online (Sandbox Code Playgroud)
我知道大多数熟悉Python的人都会不同意,但是我认为这段代码对Python初学者来说是非常错误的方向,以这种方式进行实际上有害的,无论是单行代码,使用还是enumerate输入少量字符。