鱼C论坛

 找回密码
 立即注册

[已解决]else 的作用和用法

  [复制链接]
 楼主| 发表于 2024-9-17 15:00:48 | 显示全部楼层
@FishC

为什么for内循环 第四轮 max_col[j] 从99变成66反而更小了
matrix = [[66, 76, 99],
          [33, 24, 88],
          [10, 36, 52]]
   
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] = matrix[i][j] if matrix[i][j] < min_row[i] else min_row[i]    # min(matrix[i][j], min_row[i])
        max_col[j] = matrix[i][j] if matrix[i][j] > max_col[j] else max_col[j]# max(matrix[i][j], max_col[j])
        n=min_row[i]
        c=max_col[j]
        print("行",n)
        print("列",c)
# 遍历矩阵中的每一个元素
# 判断是否同时满足“同一行的所有元素中最小”和“同一列的所有元素中最大”
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])
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-9-17 15:01:00 | 显示全部楼层
萌萌哒的杂粮饼 发表于 2024-09-17 15:00
@FishC

为什么for内循环 第四轮 max_col 从99变成6 ...


你好,鱼油!

你在代码中遇到的问题是 `max_col[j]` 的值在某次循环中变得更小了。这是因为 `max_col` 列表中的值在不断地被当前元素更新,而不是保持当前列最大的值。这是你的代码片段中相关部分:
matrix = [[66, 76, 99],
          [33, 24, 88],
          [10, 36, 52]]
    
row = len(matrix)
col = len(matrix[0])
    
min_row = [1024] * row
max_col = [0] * col
    
for i in range(row):
    for j in range(col):
        min_row[i] = matrix[i][j] if matrix[i][j] < min_row[i] else min_row[i]
        max_col[j] = matrix[i][j] if matrix[i][j] > max_col[j] else max_col[j]
        n = min_row[i]
        c = max_col[j]
        print("行", n)
        print("列", c)

问题在于更新 `max_col[j]` 的逻辑。如果当前 `matrix[i][j]` 小于在上一轮计算出来的 `max_col[j]`,它不应该更新为更小的值。

为了解决这个问题,你可以这样做:
matrix = [[66, 76, 99],
          [33, 24, 88],
          [10, 36, 52]]
    
row = len(matrix)
col = len(matrix[0])

min_row = [float('inf')] * row  # 1024 改成 float('inf'),以确保开始是一个非常大的值
max_col = [-float('inf')] * col # 0 改成 -float('inf'),以确保开始是一个非常小的值

for i in range(row):
    for j in range(col):
        # 更新当前行的最小值
        if matrix[i][j] < min_row[i]:
            min_row[i] = matrix[i][j]
        # 更新当前列的最大值
        if matrix[i][j] > max_col[j]:
            max_col[j] = matrix[i][j]
        n = min_row[i]
        c = max_col[j]
        print("行", n)
        print("列", c)

# 遍历矩阵中的每一个元素
# 判断是否有元素同时满足“同一行的所有元素中最小”和“同一列的所有元素中最大”
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])

这样,`max_col` 中的值在更新时就不会再出现变小的情况,因为只有当`matrix[i][j]` 大于 `max_col[j]` 时,才会进行更新。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-9-17 15:06:51 | 显示全部楼层
FishC 发表于 2024-9-17 15:01
你好,鱼油!

你在代码中遇到的问题是 `max_col[j]` 的值在某次循环中变得更小了。这是因为 `max_co ...

matrix = [[66, 76, 99],
          [33, 24, 88],
          [10, 36, 52]]
   
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] = matrix[i][j] if matrix[i][j] < min_row[i] else min_row[i]    # min(matrix[i][j], min_row[i])
        max_col[j] = matrix[i][j] if matrix[i][j] > max_col[j] else max_col[j]# max(matrix[i][j], max_col[j])
        n=min_row[i]
        c=max_col[j]
        print("行",n)
        print("列",c)
# 遍历矩阵中的每一个元素
# 判断是否同时满足“同一行的所有元素中最小”和“同一列的所有元素中最大”
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])
那为什么 for j in range(col): 第二轮 max_col[j] 从数值99变成66
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-9-17 15:07:08 | 显示全部楼层
萌萌哒的杂粮饼 发表于 2024-09-17 15:06
matrix = [,
          ,
          ]
   
row =  ...


你好,鱼油!我注意到你的代码中有些地方可能有误,让我们在解决你的问题前,先对代码进行一定的修正和澄清,以便我们更好地理解和解决问题。

首先,给出的矩阵 `matrix` 为空,另外在计算 `min_row` 和 `max_col` 的部分也缺少具体逻辑。下面是修正后的代码示例,包括注释和详细步骤:
matrix = [
    [3, 8, 7],
    [9, 4, 6],
    [5, 2, 1]
]

row = len(matrix)
col = len(matrix[0])

min_row = [float('inf')] * row
max_col = [float('-inf')] * col

# 遍历矩阵中的每一个元素
# 找到每行中最小的元素,并将它们存放到列表 min_row 中
# 找到每列中最大的元素,并将它们存放到列表 max_col 中
for i in range(row):
    for j in range(col):
        min_row[i] = matrix[i][j] if matrix[i][j] < min_row[i] else min_row[i]
        max_col[j] = matrix[i][j] if matrix[i][j] > max_col[j] else max_col[j]

# 打印中间结果供调试
print("每行最小值: ", min_row)
print("每列最大值: ", max_col)

# 遍历矩阵中的每一个元素
# 判断是否同时满足“同一行的所有元素中最小”和“同一列的所有元素中最大”
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])

现在,我们可以分步解释为何 max_col 在某些循环中会变成更小的值。

### 代码运行流程:

1. 初始化 `min_row` 和 `max_col`,分别为每行的最小值和每列的最大值。
min_row = [float('inf')] * row  # 初始化每行最小值为正无穷
   max_col = [float('-inf')] * col  # 初始化每列最大值为负无穷

2. 遍历矩阵的每个元素,更新每行最小值和每列最大值。
# matrix 的值为:
   # [3, 8, 7]
   # [9, 4, 6]
   # [5, 2, 1]
   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])
在矩阵 `[3, 8, 7], [9, 4, 6], [5, 2, 1]` 的情形下:

- 对于第一行 `[3, 8, 7]`:
  - min_row[0] 最终变为 3
  - max_col[0], max_col[1], max_col[2] 分别变为 9,8,7

- 同理对于剩余的行和列:
  - 第二行 `[9, 4, 6]`
    - min_row[1] 变为 4
  - 第三行 `[5, 2, 1]`
    - min_row[2] 变为 1

### 命中你的疑问:
针对你的问题,“为什么在第二次内循环时 max_col 从数值 99 变成了 66”。如果 max_col 发生变化,意味着循环中计算逻辑可能导致某些意外情况。确保每次 `max_col[j] = max(matrix[i][j], max_col[j])` 正确执行。

请检查你的矩阵和代码是否一致。因为如果 `matrix` 初始化或逻辑有误,结果会产生偏差。

希望这能帮助你理解!如果还有问题,欢迎随时提问!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-9-17 16:25:43 | 显示全部楼层
@FishC
matrix[i][j] == min_row[i] 里的 min_row[i] 代表三组数么

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] = matrix[i][j] if matrix[i][j] < min_row[i] else min_row[i]    # min(matrix[i][j], min_row[i])
        max_col[j] = matrix[i][j] if matrix[i][j] > max_col[j] else max_col[j]# max(matrix[i][j], max_col[j])
        n=min_row[i]
        c=max_col[j]
        print("行",n)
        print("列",c)
# 遍历矩阵中的每一个元素
# 判断是否同时满足“同一行的所有元素中最小”和“同一列的所有元素中最大”
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])
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-9-17 16:25:52 | 显示全部楼层
萌萌哒的杂粮饼 发表于 2024-09-17 16:25
@FishC
matrix == min_row 里的 min_row 代表三组数 ...


min_row[i] 不是代表三组数,而是表示矩阵中第 i 行的最小值。

在你给出的代码中:
for i in range(row):
    for j in range(col):
        min_row[i] = matrix[i][j] if matrix[i][j] < min_row[i] else min_row[i]    # min(matrix[i][j], min_row[i])

这部分的意思是:

- 遍历矩阵的每个元素。
- 对于矩阵的第 i 行中的每个元素,检查它是否小于当前记录的 min_row[i](该行的最小值),如果是,则更新 min_row[i]。

类似地,`max_col[j]` 表示矩阵中第 j 列的最大值:
max_col[j] = matrix[i][j] if matrix[i][j] > max_col[j] else max_col[j]    # max(matrix[i][j], max_col[j])

理解这一点后,你就知道 `min_row[i]` 和 `max_col[j]` 分别是记录每行的最小值和每列的最大值,而不是包含三组数或者其他任何内容。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-9-20 11:05:35 | 显示全部楼层
@FishC
为什么我打下面的代码老报错

> matrix = [[1, 2, 3],

...           [4, 5, 6],

...           [7, 8, 9]]

>>> diag = []

>>> for i in range(len(matrix)):

...     i *= matrix[zxsq-anti-bbcode-i][zxsq-anti-bbcode-i]

...     diag.append(i)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-9-20 11:09:51 | 显示全部楼层
萌萌哒的杂粮饼 发表于 2024-09-20 11:05
@FishC
为什么我打下面的代码老报错

> matrix = [ ...


你好鱼油!

你的代码有几个问题。让我来帮你修改一下:

1. 下标`i`和`matrix[zxsq-anti-bbcode-i][zxsq-anti-bbcode-i]`的问题。
2. `diag.append(i)` 这里你应该append矩阵中的值,而不是下标`i`乘以某个值。

改正后的代码如下:
matrix = [[1, 2, 3],
          [4, 5, 6],
          [7, 8, 9]]

diag = []

for i in range(len(matrix)):
    diag.append(matrix[i][i])

print(diag)

这个代码的目的应该是提取矩阵的主对角线元素,将其存入`diag`列表中。所以循环中`diag.append(matrix[i][i])`就能完成这个功能了。试试看吧!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-9-20 11:38:53 | 显示全部楼层
@FishC

这是课后试题给的答案,为什么打印出来会报错呢
matrix =[[1, 2, 3],
         [4, 5, 6],
         [7, 8, 9]]
diag = [matrix[zxsq-anti-bbcode-i][len(M)-1-i] for i in range(len(matrix))]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-9-20 11:45:38 | 显示全部楼层
萌萌哒的杂粮饼 发表于 2024-09-20 11:38
@FishC

这是课后试题给的答案,为什么打印出来会报 ...


鱼油,你好!你在代码里有一个变量引用错误,正确的变量名应该是 `matrix`,所以需要修改成 `matrix[zxsq-anti-bbcode-i][len(matrix)-1-i]`。不过这里的 `zxsq-anti-bbcode-i` 看起来是一个错误的占位符,我们按它正确的样子来写吧:

要提取矩阵中的反对角线(从右上角到左下角)的元素,可以这样修改你的代码:
matrix = [[1, 2, 3],
          [4, 5, 6],
          [7, 8, 9]]
diag = [matrix[i][len(matrix)-1-i] for i in range(len(matrix))]

print(diag)

这样会打印出 `[3, 5, 7]`,即是反对角线上的元素。希望这个解释对你有所帮助!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-9-20 17:05:44 | 显示全部楼层
@FshiC
二维列表里 一个数字怎么输入让起变成十个一样数字,而不是变成十倍
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-9-20 17:05:52 | 显示全部楼层
萌萌哒的杂粮饼 发表于 2024-09-20 17:05
@FshiC
二维列表里 一个数字怎么输入让起变成十个一 ...


你好鱼油!

如果你想在二维列表里,将一个数字重复10次成为一行而不是让它乘以10,可以这样做:
# 初始化一个二维列表,每行包含10个一样的数字
number = 7  # 例如,这是你想重复的数字
matrix = [[number] * 10]  # 这里填入你需要重复的数字

print(matrix)

这样输出的 `matrix` 是包含 `10` 个 `7` 的一维列表。如果你有多行,可以这样:
# 重复填充多行
rows = 3  # 你想要的行数
matrix = [[number] * 10 for _ in range(rows)]

print(matrix)

这样输出的 `matrix` 就是一个3行10列的二维列表,每个元素都是 `7`。希望这个解释对你有帮助!如果还有问题,随时告诉我!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-9-20 17:32:19 | 显示全部楼层
@FshiC
填写下方代码为10*10的二维列表,并将所有的元素初始化为0

triangle = []
for i in range(10):
    # 请在此处填写恰当的代码
    for j in range(10):
        # 请在此处填写恰当的代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-9-20 17:32:28 | 显示全部楼层
萌萌哒的杂粮饼 发表于 2024-09-20 17:32
@FshiC
填写下方代码为10*10的二维列表,并将所有的 ...


鱼油你好!

你可以这样初始化一个 `10x10` 的二维列表,并将所有元素设置为 0:
triangle = []
for i in range(10):
    row = []  # 创建一个新的行
    for j in range(10):
        row.append(0)  # 在行中添加0
    triangle.append(row)  # 将行添加到列表中

# 打印结果检查
for row in triangle:
    print(row)

这样就能够得到一个 `10x10` 的二维列表,并且所有元素都是 0。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 7 天前 | 显示全部楼层
@FishC

问下 一个多元素组成的列表 一下怎么删除多余的元素
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 7 天前 | 显示全部楼层
萌萌哒的杂粮饼 发表于 2024-09-21 16:55
@FishC

问下 一个多元素组成的列表 一下怎么删除多 ...


鱼油你好!

要删除一个列表中的多余元素,你可以使用列表推导式或者过滤函数来实现。如果你是指删除列表中的重复元素,可以使用集合(set)来去重。以下是具体方法:

### 方法1:使用集合去重
my_list = [1, 2, 2, 3, 4, 4, 5]
my_list = list(set(my_list))
print(my_list)  # 输出: [1, 2, 3, 4, 5]

### 方法2:保持元素顺序去重

如果你想保持原列表的顺序,可以使用`collections.OrderedDict`:
from collections import OrderedDict

my_list = [1, 2, 2, 3, 4, 4, 5]
my_list = list(OrderedDict.fromkeys(my_list))
print(my_list)  # 输出: [1, 2, 3, 4, 5]

### 方法3:使用循环去重
my_list = [1, 2, 2, 3, 4, 4, 5]
result = []

for item in my_list:
    if item not in result:
        result.append(item)
        
print(result)  # 输出: [1, 2, 3, 4, 5]

希望这些方法能帮到你!如果有更多问题,欢迎随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 7 天前 | 显示全部楼层
FishC 发表于 2024-9-21 16:55
鱼油你好!

要删除一个列表中的多余元素,你可以使用列表推导式或者过滤函数来实现。如果你是指删除 ...

你好我的意思是
比如:
sum = [1,2,3,4,5,6,7,8,9,0]
删除sum[2]以后全部元素方法
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 7 天前 | 显示全部楼层
@FishC
sum = [1,2,3,4,5,6,7,8,9,0]
删除sum[2]以后全部元素方法
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 7 天前 | 显示全部楼层
萌萌哒的杂粮饼 发表于 2024-09-21 17:02
@FishC
sum =
删除sum以后全部元素方法


鱼油你好!你可以使用切片的方法来删除列表中从索引2开始到最后的所有元素:
sum = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
sum = sum[:2]  # 保留索引2之前的元素
print(sum)  # 输出结果应该是:[1, 2]

这样就能删除从索引2开始的所有元素了。希望这个方法对你有帮助!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 7 天前 | 显示全部楼层
萌萌哒的杂粮饼 发表于 2024-09-21 16:58
你好我的意思是
比如:
sum =
删除sum以后全部元 ...


鱼油你好!

如果你想删除列表 `sum` 中从某一索引位置开始的所有元素,可以使用切片操作来实现。假设你要删除列表 `sum` 中从索引位置 `i` 开始的所有元素,代码如下:
sum = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]  # 这是一个示例列表
i = 5  # 假设你要从索引位置 5 开始删除
sum = sum[:i]  # 切片操作,保留索引位置 5 之前的元素(不包括 5)
print(sum)

运行上面的代码后, `sum` 将变为 `[1, 2, 3, 4, 5]`,该列表中从索引位置 5 开始的元素已经被删除。

希望这个方法能帮助到你!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-28 02:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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