2017-03-13 140 views
0

我正在試圖找到嵌套列表的最大值的索引。查找嵌套列表的最大值的索引Python 3.x

我有三個列表[1,2,3,4],[5,6,7,8],[9,10,11,12]

,我想我的輸出給我值12

指數的認沽出來會讀:

最大元素的位置是在(2,3)。

謝謝!

+0

該指數是'11'不'12'因爲Python是零索引 – James

+1

@詹姆斯:這是12 OP的指標是興趣,而不是指數12 – Fallen

+0

啊。我明白你在說什麼。 「12的索引」有點含糊 – James

回答

0

沒有numpy的解決方案(假設列表及其第一個元素從不爲空):

def maxIndex(nestedList): 
    m = (0,0) 
    for i in range(len(nestedList)): 
     for j in range(len(nestedList[i])): 
      if nestedList[i][j] > nestedList[m[0]][m[1]]: 
       m = (i,j) 
    return m 
2

使用numpy的的argmax,然後解開指數:

>>> L = [[1,2,3,4], [5,6,7,8], [9,10,11,12]] 
>>> a = np.array(L) 
>>> np.unravel_index(np.argmax(a), a.shape) 
(2, 3) 
+0

我相信這會工作,但我沒有安裝它,並且網站正在永久加載。 – DPlagueis

0

如果你不想使用numpy的,你可以手動執行搜索這樣的:

a = [[1,2,3,4], [5,6,7,8], [9,10,11,12]] 

maxEntry = None 
coords = (None, None) 
for x, sublist in enumerate(a): 
    for y, entry in enumerate(sublist): 
     if maxEntry == None or entry > maxEntry: 
      maxEntry = entry 
      coords = (x,y) 

print(coords) 
0
mylist1 = [[1,2,3,4], [5,6,7,8], [9,10,11,12]] 
mylist2 = [[1,1,1,1,9], [5,5,5,5,5]] 

def myfunc(mylist): 
    xx = mylist.index(max(mylist, key = lambda x:max(x))) 
    yy = mylist[xx].index(max(mylist[xx])) 
    print(xx,yy) 

myfunc(mylist1) 
myfunc(mylist2) 

回報

(2, 3) 
(0, 4) 
+0

經過更多的試驗後,我發現如果最大數量通過第三個索引,它不會返回索引。我把[[1,1,1,1,9],[5,5,5,5,5]]作爲位置返回(0,2)。 – DPlagueis

+0

感謝您的支持。我編輯了我的答案。 – plasmon360

0

如果你想一個解決方案,爲嵌套列表中的任何深入的工作,那麼你可以試試這個。

def find_index_of_max(nested_lst): 
    _max, idx_path, cpath = None, None, [] 

    def find_max(lst, depth = 0): 
     nonlocal idx_path, _max 
     if len(cpath) - 1 < depth: 
      cpath.append(0) 

     for i, val in enumerate(lst): 
      cpath[depth] = i 
      if _max is None or val > _max: 
       idx_path = tuple(cpath) 
       _max = val 
      elif isinstance(val, list): 
       find_max(val, depth + 1) 

    find_max(nested_lst) 
    return idx_path 

#Output 
>>> find_index_of_max([[1,2,3,4], [5,6,7,8], [9,10,11,12]]) 
(2, 3) 
>>> find_index_of_max([[1,2,[16, [17, 18], 3], 3,4], [5,6,7,8], [9,10,11,12]]) 
(0, 2, 1, 1)