如何在python中选择列表矩阵中的最大数字?

如何在python中选择列表矩阵中的最大数字?,python,algorithm,optimization,Python,Algorithm,Optimization,我有一个列表列表,其中前两个作为矩阵,我可以访问第三个列表作为 list3 = m[x][y] 第三个列表混合了字符串和数字,但每个列表的大小和结构都相同。让我们将此列表中的特定条目称为感兴趣的编号。此编号在此列表中始终具有相同的索引 对于Python中感兴趣最多的列表,获取“坐标”x,y的最快方法是什么 谢谢大家! 所以,实际上,我试图在m[x][y][k]中选择最大的数字,其中k是固定的,用于所有x&y,并且“知道”它的地址是什么 max((cell[k], x, y) fo

我有一个列表列表,其中前两个作为矩阵,我可以访问第三个列表作为

list3 = m[x][y]   
第三个列表混合了字符串和数字,但每个列表的大小和结构都相同。让我们将此列表中的特定条目称为感兴趣的编号。此编号在此列表中始终具有相同的索引

对于Python中感兴趣最多的列表,获取“坐标”x,y的最快方法是什么

谢谢大家!

所以,实际上,我试图在m[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))
顺便说一句,这里是2号

此外,您还可以将结果直接分配给几个变量:

(_, x, y) = max((cell[k], x, y)
                for (y, row) in enumerate(m)
                for (x, cell) in enumerate(row))

这是在2,顺便说一句。

假设感兴趣的数量在列表中的已知位置,并且将有一个非零的最大值

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
是一个简单的方法,它在矩阵的大小上为On2。由于必须检查每个元素,因此这是可能的最快解决方案


@马塞洛的方法更丰富,但可读性可能较差

假设感兴趣的数量在列表中的已知位置,并且将有一个非零的最大值

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

indexes = itertools.product( xrange(len(m)), xrange(len(m[0]))
print max(indexes, key = lambda x: m[x[0]][x[1]][k])
是一个简单的方法,它在矩阵的大小上为On2。由于必须检查每个元素,因此这是可能的最快解决方案

@马塞洛的方法更丰富,但可读性可能较差

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

或者使用numpy

import numpy
data = numpy.array(m)
print numpy.argmax(m[:,:,k])


如果你想在python中加速操作,你真的需要看看numpy。

你怎么知道你对第三个列表中的哪个元素感兴趣?感兴趣的NUNBER或列表是以任何预先存在的顺序保存它们的?如果没有,,你能得到的最快的是^3上的for i in m:for j in i:for k in j:不是精确的代码。我总是对同一个元素感兴趣,因为我的设置方式。@FooBah没有必要排序来找到最大值。你怎么知道你对第三个列表中的哪个元素感兴趣?感兴趣的是number还是列表中的元素先前存在的秩序?如果不是的话,你能得到的最快的是^3上的for i in m:for j in i:for k in j:不是精确的代码。我总是对同一个元素感兴趣,因为我设置它的方式。@FooBah没有必要排序来找到最大值。理解逻辑需要相当多的语法知识。我会使用它,但如果我试图教那些不精通python的人为什么代码可以工作,我可能不会这么做。列表理解提供了一种比传统循环方法优越得多的思考数据操作的方法。它们是我教给新Python程序员的第一个概念之一。我认为@Marcelocontos在可读性方面获胜。首先,您可以使用枚举而不是手动计数。教授python,而不是像大多数CS一样,以一种与语言无关的方式教授概念。同样,这显然是一个更具python风格的解决方案,但是入门级程序员需要理解为什么逻辑可以工作,然后才能理解为什么有更好的方法用特定的语言来做某事。我曾带领人们通过循环学习编程,有时会添加不需要的额外变量来说明某一点,这似乎比试图向他们解释我的同一问题的一行代码更有效。我想每个人都有自己的想法。理解逻辑需要相当多的语法知识。我会使用它,但如果我试图教那些不精通python的人为什么代码可以工作,我可能不会这么做。列表理解提供了一种比传统循环方法优越得多的思考数据操作的方法。它们是我教给新Python程序员的第一个概念之一。我认为@Marcelocontos在可读性方面获胜。首先,您可以使用枚举而不是手动计数。教授python,而不是像大多数CS一样,以一种与语言无关的方式教授概念。同样,这显然是一个更具python风格的解决方案,但是入门级程序员需要理解为什么逻辑可以工作,然后才能理解为什么有更好的方法用特定的语言来做某事。我曾带领人们通过循环学习编程,有时会添加不需要的额外变量来说明某一点,这似乎比试图向他们解释我的同一问题的一行代码更有效。我想每个人都有自己的。任何解决方案本质上都是Omn,但由于Python的方法调用开销,常数因子可能很高。Numpy可以大大加快速度。+1。任何解决方案本质上都是Omn,但由于Python的方法调用开销,常数因子可能很高。Numpy可以大大加快速度 .