我有一个列表列表,其中前两个充当“矩阵”,我可以在其中访问第三个列表
list3 = m[x][y]
并且第三个列表包含字符串和数字的混合,但每个列表具有相同的大小和数字。结构体。让我们调用此列表中的特定条目“兴趣数量”。此数字在此列表中始终具有相同的索引!
获取Python中感兴趣的最大数量的列表的'坐标'(x,y)的最快方式是什么?
谢谢!
(实际上,我正在尝试选择m [x] [y] [k]中的最大数字,其中k是固定的,对于所有x& y,并且“知道”它的地址是什么)
答案 0 :(得分:4)
max((cell[k], x, y)
for (y, row) in enumerate(m)
for (x, cell) in enumerate(row))[1:]
此外,您可以将结果直接分配给几个变量:
(_, x, y) = max((cell[k], x, y)
for (y, row) in enumerate(m)
for (x, cell) in enumerate(row))
这是O( n 2 ),顺便说一句。
答案 1 :(得分:3)
import itertools
indexes = itertools.product( xrange(len(m)), xrange(len(m[0]))
print max(indexes, key = lambda x: m[x[0]][x[1]][k])
或使用numpy
import numpy
data = numpy.array(m)
print numpy.argmax(m[:,:,k])
你有兴趣加速python中的操作,你真的需要看看numpy。
答案 2 :(得分:0)
假设“感兴趣的数量”位于列表中的已知位置,并且将存在非零最大值,
maxCoords = [-1, -1]
maxNumOfInterest = -1
rowIndex = 0
for row in m:
colIndex = 0
for entry in row:
if entry[indexOfNum] > maxNumOfInterest:
maxNumOfInterest = entry[indexOfNum]
maxCoords = [rowIndex,colIndex]
colIndex += 1
rowIndex += 1
是一种天然的方法,对于矩阵的大小将是O(n 2 )。由于您必须检查每个元素,因此这是最快的解决方案。
@ Marcelo的方法更加多汁,但可能性较差。