2016-09-28 293 views
6

我有一個蟒列表是這樣的,在python列表中查找最大值和索引?

[[12587961, 0.7777777777777778], [12587970, 0.5172413793103449], [12587979, 0.3968253968253968], [12587982, 0.88], [12587984, 0.8484848484848485], [12587992, 0.7777777777777778], [12587995, 0.8070175438596491], [12588015, 0.4358974358974359], [12588023, 0.8985507246376812], [12588037, 0.5555555555555555], [12588042, 0.9473684210526315]] 

該列表的長度可以是上千種元件,根據所述子陣列中的第二項列表中的我怎樣才能得到最大的值,並得到在Python中的子數組中的第一個元素的最大值的索引?

+0

你是對的@unwind。我想他想根據第二個元素找到所有具有最大值的元素,並根據第一個值找出它們中的最大值。 – thefourtheye

+0

對不起,如果你們沒有得到它,就像這樣我想要的子陣列具有最大的第二個值,第二個值意味着在子陣列中的[1]項目 – rksh

+0

好吧......我仍然很難理解。一個小例子,例如四個或五個元素列表將會有所幫助。但我猜它已經解決了。 – unwind

回答

11

使用max函數及其key參數,只使用第二個元素比較列表的元素。

例如,

>>> data = [[12587961, 0.7777777777777778], [12587970, 0.5172413793103449], [12587979, 0.3968253968253968].... [12588042, 0.9473684210 
526315]] 
>>> max(data, key=lambda item: item[1]) 
[12588042, 0.9473684210526315] 

現在,如果你只想在第一個元素,那麼你可以簡單地得到的第一個元素單獨,或只是解壓縮的結果,這樣

>>> index, value = max(data, key=lambda item: item[1]) 
>>> index 
12588042 
>>> value 
0.9473684210526315 

編輯:如果你想找到最大值(第二個值)的所有元素中的最大索引(第一個值),那麼你可以這樣做:

>>> _, max_value = max(data, key=lambda item: item[1]) 
>>> max(index for index, value in data if value == max_value) 

你可以在一個迭代相同,這樣

max_index = float("-inf") 
max_value = float("-inf") 

for index, value in data: 
     if value > max_value: 
      max_value = value 
      max_index = index 
     elif value == max_value: 
      max_index = max(max_index, index) 
+0

真的感謝我想要的東西就像你在原始答案中提到的那樣,子數組中的最大第二個值的子數組:)有沒有一種方法可以獲得具有最大值的n個數組,如前10個最高值:) – rksh

+0

@rksh你應該給出適當的例子。這些話簡直令人困惑。 – thefourtheye

+0

好吧我會舉一個簡單的例子,如果有這樣的數組'''data = [1,2,5,7,6,8,3,9,4]'''我怎麼能得到三個最大值?在這種情況下,它是'''7,8,9''' – rksh

0
from operator import itemgetter 

a = [[12587961, 0.7777777777777778], [12587970, 0.5172413793103449], [12587979, 0.3968253968253968], [12587982, 0.88], [12587984, 0.8484848484848485], [12587992, 0.7777777777777778], [12587995, 0.8070175438596491], [12588015, 0.4358974358974359], [12588023, 0.8985507246376812], [12588037, 0.5555555555555555], [12588042, 0.9473684210526315]] 

max(a, key=itemgetter(1))[0] 
// => 12588042 
3

使用max用鑰匙。

l = [[12587961, 0.7777777777777778], [12587970, 0.5172413793103449], [12587979, 0.3968253968253968], [12587982, 0.88], [12587984, 0.8484848484848485], [12587992, 0.7777777777777778], [12587995, 0.8070175438596491], [12588015, 0.4358974358974359], [12588023, 0.8985507246376812], [12588037, 0.5555555555555555], [12588042, 0.9473684210526315]] 
max_sub = max(l, key=lambda x: x[1]) 
max_val = max_sub[1] 
max_index = max_sub[0] 
-2

簡單

list = [[12587961, 0.7777777777777778], [12587970, 0.5172413793103449], [12587979, 0.3968253968253968], [12587982, 0.88], [12587984, 0.8484848484848485], [12587992, 0.7777777777777778], [12587995, 0.8070175438596491], [12588015, 0.4358974358974359], [12588023, 0.8985507246376812], [12588037, 0.5555555555555555], [12588042, 0.9473684210526315]] 
list2 = [] 

for x in list: 
    list2.append(x[1]) 
print "index->" + str(list[list2.index(max(list2))][0]) 
print "max value->" + str(list[list2.index(max(list2))][1]) 
0
allData = [[12587961, 0.7777777777777778], [12587970, 0.5172413793103449], [12587979, 0.3968253968253968], [12587982, 0.88], [12587984, 0.8484848484848485], [12587992, 0.7777777777777778], [12587995, 0.8070175438596491], [12588015, 0.4358974358974359], [12588023, 0.8985507246376812], [12588037, 0.5555555555555555], [12588042, 0.9473684210526315]] 

listOfSecondData = [i[1] for i in allData] 
result = allData[listOfSecondData.index(max(listOfSecondData))][0] 

print(result) 
#Output: 12588042 
相關問題