使用lambda(python)查找矩阵中列的索引

使用lambda(python)查找矩阵中列的索引,python,lambda,Python,Lambda,如何找到元素和最小的列的索引。我想找到使用lambdas的简短解决方案。 例如,对于给定的矩阵: [[7, 2, 7, 2, 8], [2, 9, 4, 1, 7], [3, 8, 6, 2, 4], [2, 5, 2, 9, 1], [6, 6, 5, 4, 5]] 它应该返回3。因为第三列具有最小的元素和。使用numpy,您可以按列sum,并使用argmin()查找最小和索引: import numpy as np np.array(lst).sum(axis = 0).argmi

如何找到元素和最小的列的索引。我想找到使用lambdas的简短解决方案。 例如,对于给定的矩阵:

[[7, 2, 7, 2, 8],
 [2, 9, 4, 1, 7],
 [3, 8, 6, 2, 4],
 [2, 5, 2, 9, 1],
 [6, 6, 5, 4, 5]]

它应该返回
3
。因为第三列具有最小的元素和。

使用
numpy
,您可以按列
sum
,并使用
argmin()
查找最小和索引:

import numpy as np
np.array(lst).sum(axis = 0).argmin()
# 3

或者,您可以使用列表理解而不使用
numpy
package:

min(((i, sum(v)) for i, v in enumerate(zip(*lst))), key = lambda x: x[1])[0]
# 3
  • 使用
    zip(*lst)
    转换列表
  • 枚举以循环遍历列(因为它已被转置)
  • 对于每一列,采用索引和列的总和
  • 通过返回元组(索引,最小值)的和计算最小值对

基于您的解决方案,我发现使用纯Python的更短的解决方案:
min(enumerate(map(sum,zip(*m)),key=lambda x:x[1])[0]
不一定更快,因为这两种方法都只使用生成器,但肯定是更好、更短的方法。