我正在試圖找到嵌套列表的最大值的索引。查找嵌套列表的最大值的索引Python 3.x
我有三個列表[1,2,3,4],[5,6,7,8],[9,10,11,12]
,我想我的輸出給我值12
指數的認沽出來會讀:
最大元素的位置是在(2,3)。
謝謝!
我正在試圖找到嵌套列表的最大值的索引。查找嵌套列表的最大值的索引Python 3.x
我有三個列表[1,2,3,4],[5,6,7,8],[9,10,11,12]
,我想我的輸出給我值12
指數的認沽出來會讀:
最大元素的位置是在(2,3)。
謝謝!
沒有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
使用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)
我相信這會工作,但我沒有安裝它,並且網站正在永久加載。 – DPlagueis
如果你不想使用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)
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)
經過更多的試驗後,我發現如果最大數量通過第三個索引,它不會返回索引。我把[[1,1,1,1,9],[5,5,5,5,5]]作爲位置返回(0,2)。 – DPlagueis
感謝您的支持。我編輯了我的答案。 – plasmon360
如果你想一個解決方案,爲嵌套列表中的任何深入的工作,那麼你可以試試這個。
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)
該指數是'11'不'12'因爲Python是零索引 – James
@詹姆斯:這是12 OP的指標是興趣,而不是指數12 – Fallen
啊。我明白你在說什麼。 「12的索引」有點含糊 – James