鱼C论坛

 找回密码
 立即注册
查看: 2714|回复: 2

[已解决]请问23课后作业这套代码的 实现原理是什么

[复制链接]
发表于 2022-10-9 13:37:46 | 显示全部楼层 |阅读模式

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

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

x
matrix = [[10, 36, 52],
          [33, 24, 88],
          [66, 76, 99]]
   
row = len(matrix)
col = len(matrix[0])
   
min_row = [1024] * row
max_col = [0] * col
   
# 遍历矩阵中的每一个元素
# 找到每行中最小的元素,并将它们存放到列表min_row中
# 找到每列中最大的元素,并将它们存放到列表max_col中
for i in range(row):
    for j in range(col):
        min_row[i] = min(matrix[i][j], min_row[i])
        max_col[j] = max(matrix[i][j], max_col[j])
   
# 遍历矩阵中的每一个元素
# 判断是否同时满足“同一行的所有元素中最小”和“同一列的所有元素中最大”
for i in range(row):
    for j in range(col):
        if matrix[i][j] == min_row[i] and matrix[i][j] == max_col[j]:
            print(matrix[i][j])
最佳答案
2022-10-9 15:13:48
本帖最后由 jackz007 于 2022-10-9 16:37 编辑
        首先,应该确定,如果 matrix 没有重复元素,那么,满足行内最小、列内最大这样条件的元素一定存在,而且,只有一个。
        matrix 有 3 行 3 列,列表 min_row、max_col 中各保存了 3 个元素,循环遍历这两个列表,如果它们存在相同元素,例如,min_row[i] == max_col[j] 那就说明元素 matrix[i][j] 是矩阵 matrix 中满足行内最小同时列内最大的那个元素。
                 运行一下这个代码,看看结果,也许能帮助你理解原理:
matrix = [[10, 36, 52],[33, 24, 88],[66, 76, 99]]
d = [min(matrix[i]) for i in range(len(matrix))]                                       # d = matrix 行最小值列表
e = [max([matrix[i][j] for i in range(len(matrix))]) for j in range(len(matrix[0]))]   # e = matrix 列最大值列表
for i in range(len(d)):
    for j in range(len(e)):
        if d[i] == e[j] : 
            print('matrix[%d , %d] = %d' % (i , j , matrix[i][j]))
            break
print()
print("reference infomation : ")
print('=' * 30)
print('matrix :' , matrix[0])
for i in range(1 , len(matrix)) : print(' ' * 8 , matrix[i])
print()
print('     d :' , d)
print('     e :' , e)
       运行实况:
D:\[00.Exerciese.2022]\Python>python x.py
matrix[2 , 0] = 66

reference infomation :
==============================
matrix : [10, 36, 52]
         [33, 24, 88]
         [66, 76, 99]

     d : [10, 24, 66]
     e : [66, 76, 99]

D:\[00.Exerciese.2022]\Python>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-10-9 15:13:48 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2022-10-9 16:37 编辑
        首先,应该确定,如果 matrix 没有重复元素,那么,满足行内最小、列内最大这样条件的元素一定存在,而且,只有一个。
        matrix 有 3 行 3 列,列表 min_row、max_col 中各保存了 3 个元素,循环遍历这两个列表,如果它们存在相同元素,例如,min_row[i] == max_col[j] 那就说明元素 matrix[i][j] 是矩阵 matrix 中满足行内最小同时列内最大的那个元素。
                 运行一下这个代码,看看结果,也许能帮助你理解原理:
matrix = [[10, 36, 52],[33, 24, 88],[66, 76, 99]]
d = [min(matrix[i]) for i in range(len(matrix))]                                       # d = matrix 行最小值列表
e = [max([matrix[i][j] for i in range(len(matrix))]) for j in range(len(matrix[0]))]   # e = matrix 列最大值列表
for i in range(len(d)):
    for j in range(len(e)):
        if d[i] == e[j] : 
            print('matrix[%d , %d] = %d' % (i , j , matrix[i][j]))
            break
print()
print("reference infomation : ")
print('=' * 30)
print('matrix :' , matrix[0])
for i in range(1 , len(matrix)) : print(' ' * 8 , matrix[i])
print()
print('     d :' , d)
print('     e :' , e)
       运行实况:
D:\[00.Exerciese.2022]\Python>python x.py
matrix[2 , 0] = 66

reference infomation :
==============================
matrix : [10, 36, 52]
         [33, 24, 88]
         [66, 76, 99]

     d : [10, 24, 66]
     e : [66, 76, 99]

D:\[00.Exerciese.2022]\Python>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-9 16:54:07 | 显示全部楼层
核心还是去找行列坐标,如果对于循环不了解可以打个print或者计数器,方便观察。
#原嵌列表
matrix = [[10, 36, 52],
          [33, 24, 88],
          [66, 76, 99]]
#获取row行数,获取col列数
row = len(matrix)
col = len(matrix[0])
# print(f'low:{row}')
# print(f'col:{col}')
min_row = [1024] * row
max_col = [0] * col
# print(f'min_row:{min_row}')
# print(f'max_col:{max_col}')
# 遍历矩阵中的每一个元素
# 找到每行中最小的元素,并将它们存放到列表min_row中
# 找到每列中最大的元素,并将它们存放到列表max_col中
i1=0
j1=0
for i in range(row):

    print(f'行数{i1},{i}')
    for j in range(col):
        print(f'下标{i},{j}')
        print(f'比较的两数为:{matrix[i][j]},{min_row[i]}')
        min_row[i] = min(matrix[i][j], min_row[i])
        max_col[j] = max(matrix[i][j], max_col[j])
        j1 +=1
    i1 += 1
print(min_row)
print(max_col)
# 遍历矩阵中的每一个元素
# 判断是否同时满足“同一行的所有元素中最小”和“同一列的所有元素中最大”
for i in range(row):
    for j in range(col):
        print(matrix[i][j],min_row[i],max_col[j])
        if matrix[i][j] == min_row[i] and matrix[i][j] == max_col[j]:
            print(matrix[i][j])
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-14 23:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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