如何挑选Python中列表矩阵中的最大数字?
我有一个列表的列表 - - 列表,其中前两个充当“黑客帝国”,在那里我可以进入第三列表作为如何挑选Python中列表矩阵中的最大数字?
list3 = m[x][y]
和第三列表包含字符串的混合和数字,但每个列表具有相同的大小&结构。让我们在这个列表中调用一个特定的条目。这个数字在这个列表中总是有相同的索引!
什么是最快的获取“坐标”(x,y)的列表,其中Python的兴趣数量最多的列表是“坐标”(x,y)?
谢谢!
(所以真的,我想挑米数量最多[X] [Y] [K]其中k是固定的,对于所有的x & y和 '知道' 它的地址是什么)
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(ñ ),顺便说一句。
假设“兴趣的数量”是在列表中的一个已知的点,并且将有一个非零最大值,
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 )上矩阵的大小。由于您必须检查每个元素,这是可能的最快解决方案。
@马塞洛的方法更加多汁,但可读性较差。
可读性较差? –
需要大量的语法知识来理解逻辑。我会使用它,但如果我试图教某人为什么代码能工作,如果他们不熟悉python,可能不会。 – brc
列表推断提供了一种比传统循环方法更好地考虑数据操作的方式。他们是我会教一个新的Python程序员的第一个概念之一。 –
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的。
+1。任何解决方案本质上都是O(mn),但是在Python的方法调用开销下,常数因子可能很高。 Numpy可以通过一个很重要的因素加快速度。 –
你怎么知道你感兴趣的第三个列表中的元素? –
感兴趣的nunbers(或名单持有他们)在任何预先存在的秩序?如果不是的话,你得到的最快速度是O(n^3),其中'for i in m:for j in i:for k in j:'(not exact code)。 –
我总是对同样的元素感兴趣,因为我设置它的方式。 – Deniz