星雨幽幽 发表于 2025-9-12 11:30:23

求大佬帮我看看我写的第023讲:列表(V)| 课后测试解法行不行

1. 请编程找出矩阵中的幸运数字。
说明:假设给定一个 m * n 的矩阵(矩阵中数值的取值范围是 0~1024,且各不相同),如果某一个元素的值在同一行的所有元素中最小,并且在同一列的所有元素中最大,那么该元素便是幸运数字。
假设给定的矩阵如下:
matrix = [,
               ,
               ]

我的解法如下:
x=
matrix = [,
               ,
               ]
for i in range(3):
    a=min(matrix)
    b=matrix.index(a)
    for j in range(3):
      x=matrix
    if max(x)==a:
      print(a)

FishC 发表于 2025-9-12 11:31:41

您好!看到您尝试解决第023讲的课后测试题,很棒!不过您的代码中有一些错误,我来帮您分析和修正。

首先,您的代码:

x=
matrix = [,
          ,
          ]
for i in range(3):
    a=min(matrix)
    b=matrix.index(a)
    for j in range(3):
      x=matrix
    if max(x)==a:
      print(a)


主要问题:
- min(matrix):这试图找整个矩阵的最小值,但matrix是列表的列表,Python会比较子列表,而不是数值,这会导致错误。
- matrix.index(a):因为a是数值,但matrix包含子列表,index()方法无法直接找到数值的索引。
- 循环内部逻辑混乱:x=matrix重复赋值,且max(x)找的是整个矩阵的最大值,不是列的最大值。

正确的思路是:
1. 遍历每一行,找到该行的最小值。
2. 记录这个最小值所在的列索引。
3. 检查这个值是否也是其所在列的最大值。
4. 如果是,输出幸运数字。

以下是修正后的代码,适用于任何 m x n 矩阵:

matrix = [,
          ,
          ]

幸运数字 = []# 用于存储所有幸运数字

for i in range(len(matrix)):
    # 找到当前行的最小值
    row_min = min(matrix)
    # 找到最小值在当前行中的列索引
    col_index = matrix.index(row_min)
    # 获取该列的所有元素
    column = for row in matrix]
    # 检查是否是该列的最大值
    if max(column) == row_min:
      幸运数字.append(row_min)

if 幸运数字:
    print("矩阵中的幸运数字是:", 幸运数字)
else:
    print("没有找到幸运数字")


解释:
- 使用min(matrix)找当前行的最小值。
- matrix.index(row_min)找到最小值所在的列索引。
- 列表推导式 for row in matrix]获取整列数据。
- 比较列最大值和行最小值,判断是否为幸运数字。

在您的矩阵中,运行后会输出:矩阵中的幸运数字是: ,因为15在第一行最小,且在第一列最大。

如果还有疑问,请随时追问!继续加油!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

不二如是 发表于 2025-9-12 12:11:20

把行数/列数都写死成了3,还需要额外数组x才能运行哦~~

代码:

def lucky_numbers(matrix):
    m, n = len(matrix), len(matrix)
    ans = []
    for i, row in enumerate(matrix):
      a = min(row)               # 该行最小
      j = row.index(a)         # 所在列
      # 看看该列是否以它为最大
      if a == max(matrix for r in range(m)):
            ans.append(a)
    return ans

matrix = [,
          ,
          ]

print(lucky_numbers(matrix))   #

星雨幽幽 发表于 2025-9-12 16:29:00

不二如是 发表于 2025-9-12 12:11
把行数/列数都写死成了3,还需要额外数组x才能运行哦~~

代码:

那我如果这么写呢
x=*len(matrix)

for i in range(len(matrix)):
    a=min(matrix)
    b=matrix.index(a)
    for j in range(len(matrix)):
      x=matrix
    if max(x)==a:
      print(a)

星雨幽幽 发表于 2025-9-12 16:30:05

不二如是 发表于 2025-9-12 12:11
把行数/列数都写死成了3,还需要额外数组x才能运行哦~~

代码:

截图

不二如是 发表于 2025-9-12 16:55:39

星雨幽幽 发表于 2025-9-12 16:30
截图

??

cw19911008 发表于 2025-9-15 17:59:52

matrix = [,
          ,
          ]
row_num = len(matrix)
col_num = len(matrix)

row_list =
col_list =

for i in range(row_num):
    for j in range(col_num):
      if matrix == row_list and matrix == col_list:
            print(matrix)
页: [1]
查看完整版本: 求大佬帮我看看我写的第023讲:列表(V)| 课后测试解法行不行