3 回答

TA贡献1796条经验 获得超10个赞
if isMinLevel: return values.index(min(values))其他: return values.index(max(values))

TA贡献1895条经验 获得超3个赞
假设您有一个列表values = [3,6,1,5]
,并且需要最小元素的索引,即index_min = 2
在这种情况下。
避免itemgetter()
在其他答案中提出的解决方案,而是使用
index_min = min(xrange(len(values)), key=values.__getitem__)
因为它不需要也不需要import operator
使用enumerate
,并且它总是比使用的解决方案更快(下面的基准)itemgetter()
。
如果您正在处理numpy数组或者可以numpy
作为依赖项,请考虑使用
import numpy as np index_min = np.argmin(values)
这将比第一个解决方案更快,即使您将其应用于纯Python列表,如果:
它大于几个元素(我机器上大约2 ** 4个元素)
你可以负担从纯列表到
numpy
数组的内存复制
正如这个基准指出:
我已经在我的机器上使用python 2.7运行基准测试,用于上面的两个解决方案(蓝色:纯python,第一个解决方案)(红色,numpy解决方案)和基于itemgetter()
(黑色,参考解决方案)的标准解决方案。与python 3.5相同的基准测试表明,这些方法与上面提到的python 2.7案例完全相同

TA贡献1786条经验 获得超13个赞
如果枚举列表中的项目,则可以同时找到最小/最大索引和值,但对列表的原始值执行最小值/最大值。像这样:
import operator
min_index, min_value = min(enumerate(values), key=operator.itemgetter(1))
max_index, max_value = max(enumerate(values), key=operator.itemgetter(1))
这样,列表只会在min(或max)中遍历一次。
添加回答
举报