在矩阵中找到最大元素

3 投票
3 回答
7376 浏览
提问于 2025-04-18 09:30

当我被要求输入一个矩阵的行数,然后再输入这些行的元素时,我需要找到这个矩阵中最大的元素,并返回它的位置(行和列)。

举个例子,如果我输入2行数据如下:

[1 3 7]

[4 8 1]

那么最大的元素的位置就是(1, 1),这表示行索引是1,列索引也是1。

我有以下代码,它在获取位置方面半成功:

def main():
    matrix = []

    numRows = eval(input("Enter the number of rows in the list: "))
    for i in range(numRows):
        rows = input("Enter a row: ")
        items = rows.split()
        list = [eval(x) for x in items]
        matrix.append(list)

    return locateLargest(matrix)

def locateLargest(a):

    for i in range(len(a)):
        indexOfMaxRow = 0
        maxRow = max(a[i])

        for row in range(len(a)):
            if max(a[row]) > maxRow:
                maxRow = max(a[row])
                indexOfMaxRow = row

    for j in range(len(a)):
        indexOfMaxColumn = 0
        maxColumn = max(a[j])

        for column in range(len(a)):
            if max(a[column]) > maxColumn:
                maxColumn = max(a[column])
                indexOfMaxColumn = column

    print("The location of the largest element is at (", indexOfMaxRow, ", ", indexOfMaxColumn, ")")

main()

我觉得我的代码在def locateLargest(a)这一部分有问题,因为在打印结果之前一切都正常。有没有人能告诉我哪里出错了?非常感谢任何建议!

3 个回答

2

这太复杂了:

A = [[1, 3, 7],
     [4, 8, 1]]

def max_element(A):
    r, (c, l) = max(map(lambda t: (t[0], max(enumerate(t[1]), key=lambda v: v[1])), enumerate(A)), key=lambda v: v[1][1])
    return (l, r, c)

print max_element(A)

输出

(8, 1, 1)
6

如果你能使用 numpy 这个库,那么在一个数组中找到最大值的位置就非常简单了:

import numpy as np
na = np.array(a)
indices = np.where(na == na.max())
1

你的 locateLargest 函数可以简化很多:

def locateLargest(matrix):
    largest_num = None 
    row = None
    col = None

    for row_idx, row in enumerate(matrix):
        for col_idx, num in enumerate(row):
            if num > largest_num or largest_num is None:
                largest_num = num
                row = row_idx
                col = col_idx

    return (largest_num, row, col)

这个函数会返回最大的数字,以及它所在的列和行的索引(索引从0开始)。

举个例子:

>>> print(locateLargest([[1, 2, 3], [4, 5, 6], [7, 8, 9]]))
(9, 2, 2)

撰写回答