Python生成-10~10随机矩阵 交换最大负元与最小正元所在列
需求说明
编写程序生成取值范围为-10到10的随机数构成的矩阵,完成指定两列的位置互换:互换对象为包含矩阵全局最大负元素的列、包含矩阵全局最小正元素的列。
规则参考:
- 行序列
[-8, -2, 3, 5]的最大负值为-2,调整后序列为[-2, -8, 3, 5] - 行序列
[-4, -2, 3, 6, 8]的最小正值为3,调整后序列为[3, -4, -2, 6, 8]
当前进展
已完成矩阵随机生成的基础代码,暂无法正确识别最大负元素、最小正元素的位置,也未完成列交换逻辑。相关参考材料:
现有代码草稿:
import random print("Enter number of cols:") n = int(input()) print("Enter number of rows:") m = int(input()) rows, cols = (m, n) nums=[] for i in range(rows): col = [] for j in range(cols): col.append(random.randint(-10, 10)) nums.append(col) for row in nums: print(row) updatedNums = [] for i in range(rows): col = [] for j in range(cols): col.append(0) updatedNums.append(col) max_negative = max(nums for nums in nums if nums < 0) min_positive = min(nums for nums in nums if nums > 0) for i in range(rows): for f in range(cols): if nums[i][f] == max_negative: updatedNums[i][j] = nums[i][j]
代码问题排查
- 最值计算逻辑错误:直接遍历
nums得到的是行级列表对象,无法和0做数值比较,既没有遍历到矩阵内的单个元素计算最值,也没有记录最值对应的列索引 - 列交换逻辑缺失:仅初始化了全零的结果矩阵,没有实现整列互换的逻辑,且循环内变量名混用(内层循环索引定义为
f,赋值时调用了未定义的j) - 边界场景未覆盖:没有处理矩阵无负数、无正数、两个目标列索引重合的特殊情况,运行时会直接报错
正确实现代码
实现逻辑:
- 双层遍历矩阵所有元素,筛选所有负数取最大值、所有正数取最小值,同步记录两个最值对应的列序号
- 做边界判断:如果矩阵不存在负数/不存在正数/两个目标列是同一列,直接输出原矩阵即可
- 逐行交换两个目标列的元素,输出最终结果
import random # 读取矩阵维度 print("Enter number of cols:") n = int(input()) print("Enter number of rows:") m = int(input()) rows, cols = m, n # 生成随机矩阵 nums = [] for i in range(rows): current_row = [random.randint(-10, 10) for _ in range(cols)] nums.append(current_row) print("原矩阵:") for row in nums: print(row) # 初始化最值和对应列索引 max_neg = -float('inf') max_neg_col = -1 min_pos = float('inf') min_pos_col = -1 # 遍历全矩阵找目标列 for i in range(rows): for j in range(cols): val = nums[i][j] if val < 0: if val > max_neg: max_neg = val max_neg_col = j elif val > 0: if val < min_pos: min_pos = val min_pos_col = j # 处理无需交换的场景 if max_neg_col == -1 or min_pos_col == -1 or max_neg_col == min_pos_col: print("\n不存在满足交换条件的两列,最终矩阵与原矩阵一致") else: # 逐行交换两列 for i in range(rows): nums[i][max_neg_col], nums[i][min_pos_col] = nums[i][min_pos_col], nums[i][max_neg_col] print(f"\n交换列:第{max_neg_col+1}列(全局最大负元素{max_neg}) <-> 第{min_pos_col+1}列(全局最小正元素{min_pos})") print("交换后矩阵:") for row in nums: print(row)
内容的提问来源于stack exchange,提问作者Kamel Avad
相关产品推荐
相关产品推荐

