3 回答

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超10個贊
if isMinLevel: return values.index(min(values))其他: return values.index(max(values))

TA貢獻(xiàn)1895條經(jīng)驗(yàn) 獲得超3個贊
假設(shè)您有一個列表values = [3,6,1,5]
,并且需要最小元素的索引,即index_min = 2
在這種情況下。
避免itemgetter()
在其他答案中提出的解決方案,而是使用
index_min = min(xrange(len(values)), key=values.__getitem__)
因?yàn)樗恍枰膊恍枰?code>import operator使用enumerate
,并且它總是比使用的解決方案更快(下面的基準(zhǔn))itemgetter()
。
如果您正在處理numpy數(shù)組或者可以numpy
作為依賴項(xiàng),請考慮使用
import numpy as np index_min = np.argmin(values)
這將比第一個解決方案更快,即使您將其應(yīng)用于純Python列表,如果:
它大于幾個元素(我機(jī)器上大約2 ** 4個元素)
你可以負(fù)擔(dān)從純列表到
numpy
數(shù)組的內(nèi)存復(fù)制
正如這個基準(zhǔn)指出:
我已經(jīng)在我的機(jī)器上使用python 2.7運(yùn)行基準(zhǔn)測試,用于上面的兩個解決方案(藍(lán)色:純python,第一個解決方案)(紅色,numpy解決方案)和基于itemgetter()
(黑色,參考解決方案)的標(biāo)準(zhǔn)解決方案。與python 3.5相同的基準(zhǔn)測試表明,這些方法與上面提到的python 2.7案例完全相同

TA貢獻(xiàn)1786條經(jīng)驗(yàn) 獲得超13個贊
如果枚舉列表中的項(xiàng)目,則可以同時找到最小/最大索引和值,但對列表的原始值執(zhí)行最小值/最大值。像這樣:
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)中遍歷一次。
添加回答
舉報(bào)