2017-03-13 9 views
0

入れ子リストの最大値のインデックスを探しようとしています。入れ子リストの最大値のインデックスを見つけるPython 3.x

私は3つのリスト[[1,2,3,4]、[5,6,7,8]、[9,10,11,12]]

と私は私の出力を希望を持っています私にアウトプットを読んでいました値のインデックス12

を与える:

最大の要素の位置は(2,3)です。

ありがとうございます!

+0

Pythonはゼロインデックス – James

+1

@Jamesあるので、インデックスはない '12' '11'のようになります。これは、12 OPのインデックスがない指標12 – Fallen

+0

ああ、に興味があります。私はあなたが何を言っているのかを見ます。 "12のインデックス"は少し曖昧です – James

答えて

0

ソリューションを(リストとその最初の要素が空になることはありませんと仮定した場合)のようになります。

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を使用して、インデックス解明:あなたがnumpyのを使用しない場合、あなたはこのように手動検索を行うことができます

>>> 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

さらに試行した結果、最大の数字が3番目のインデックスに渡された場合、インデックスを返さないことがわかりました。私は[[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) 
関連する問題