And*_*ark 12
>>> values = [1,2,3,4,1,2]
>>> -min((x, -i) for i, x in enumerate(values))[1]
4
Run Code Online (Sandbox Code Playgroud)
不修改原始列表,适用于任意迭代,只需要一次通过.
这将创建一个可迭代的元组,第一个值是列表中的原始元素,第二个元素是否定索引.当在这个可迭代的元组中找到最小值时,将首先比较值,然后比较索引,因此最终会得到(min_value,lowest_negative_index)的元组.通过从该元组中取出第二个元素并再次取消它,您将获得最小值的最高索引.
这是一个非常相似的替代版本,但使用键功能min():
>>> min(range(len(values)), key=lambda i: (values[i], -i))
4
Run Code Online (Sandbox Code Playgroud)
请注意,此版本仅适用于序列(列表,元组,字符串等).
a = [1,2,3,4,1,2]
a.reverse()
print len(a) - a.index(min(a)) - 1
Run Code Online (Sandbox Code Playgroud)
评论后更新:
可以通过再次反转来消除副作用(但这当然效率很低)。
a.reverse()
Run Code Online (Sandbox Code Playgroud)