鱼C论坛

 找回密码
 立即注册
查看: 162|回复: 6

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

[复制链接]
发表于 2025-9-12 11:30:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

我的解法如下:
x=[0,0,0]
matrix = [[10, 36, 52],
               [33, 24, 88],
               [66, 76, 99]]
for i in range(3):
    a=min(matrix[i])
    b=matrix[i].index(a)
    for j in range(3):
        x[j]=matrix[j][b]
    if max(x)==a:
        print(a)
幸运数字.png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2025-9-12 11:31:41 | 显示全部楼层
您好!看到您尝试解决第023讲的课后测试题,很棒!不过您的代码中有一些错误,我来帮您分析和修正。

首先,您的代码:

  1. x=
  2. matrix = [[3, 8, 7],
  3.           [9, 11, 13],
  4.           [15, 16, 17]]
  5. for i in range(3):
  6.     a=min(matrix)
  7.     b=matrix.index(a)
  8.     for j in range(3):
  9.         x=matrix
  10.     if max(x)==a:
  11.         print(a)
复制代码


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

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

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

  1. matrix = [[3, 8, 7],
  2.           [9, 11, 13],
  3.           [15, 16, 17]]

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

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

  15. if 幸运数字:
  16.     print("矩阵中的幸运数字是:", 幸运数字)
  17. else:
  18.     print("没有找到幸运数字")
复制代码


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

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

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-9-12 12:11:20 | 显示全部楼层
把行数/列数都写死成了3,还需要额外数组x才能运行哦~~

代码:

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

  11. matrix = [[10, 36, 52],
  12.           [33, 24, 88],
  13.           [66, 76, 99]]

  14. print(lucky_numbers(matrix))   # [66]
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-9-12 16:29:00 | 显示全部楼层
不二如是 发表于 2025-9-12 12:11
把行数/列数都写死成了3,还需要额外数组x才能运行哦~~

代码:

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

for i in range(len(matrix)):
    a=min(matrix[i])
    b=matrix[i].index(a)
    for j in range(len(matrix)):
        x[j]=matrix[j][b]
    if max(x)==a:
        print(a)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2025-9-12 16:30:05 | 显示全部楼层
不二如是 发表于 2025-9-12 12:11
把行数/列数都写死成了3,还需要额外数组x才能运行哦~~

代码:

截图
幸运数字2.png
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-9-12 16:55:39 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-9-15 17:59:52 | 显示全部楼层
matrix = [[10, 36, 52],
          [33, 24, 88],
          [66, 76, 99]]
row_num = len(matrix)
col_num = len(matrix[0])

row_list = [min(row) for row in matrix]
col_list = [max(col) for col in zip(*matrix)]

for i in range(row_num):
    for j in range(col_num):
        if matrix[i][j] == row_list[i] and matrix[i][j] == col_list[j]:
            print(matrix[i][j])
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-10-1 10:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表