Python编写随机矩阵最大负元素与最小正元素列交换程序
矩阵指定列互换功能实现
需求明细
- 矩阵元素取值为(-10, 10)区间的随机整数,不包含-10、10两个边界值
- 定位两个目标列:
- 列1:包含整个矩阵最大负元素的列,调整列内元素顺序,将该最大负元素放到列的首位
- 列2:包含整个矩阵最小正元素的列,调整列内元素顺序,将该最小正元素放到列的首位
- 完成列内调整后,交换两个目标列的位置
规则参考:序列[-8, -2, 3, 5]中最大负元素为-2,对应列调整后-2位于列首;序列[-4, -2, 3, 6, 8]中最小正元素为3,对应列调整后3位于列首。
原有代码待修正点
- 随机数生成逻辑不符合要求,原代码使用
random.randint(0,50)生成0-50区间值,和需求的-9到9区间(不含±10)不符 - 缺少全局最大负元素、最小正元素的遍历定位逻辑
- 缺少列内元素移位、两列交换的实现逻辑
完整实现代码
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 = [] for j in range(cols): # randint为闭区间取值,取-9到9正好排除±10边界 current_row.append(random.randint(-9, 9)) nums.append(current_row) print("原始矩阵:") for row in nums: print(row) # 初始化最大负元素、最小正元素的记录值和位置 max_neg = -10 # 初始值比所有合法负数更小 min_pos = 10 # 初始值比所有合法正数更大 neg_r, neg_c = 0, 0 # 最大负元素的行、列索引 pos_r, pos_c = 0, 0 # 最小正元素的行、列索引 # 遍历全矩阵定位两个目标元素 for i in range(rows): for j in range(cols): val = nums[i][j] if val < 0: if val > max_neg: max_neg = val neg_r, neg_c = i, j elif val > 0: if val < min_pos: min_pos = val pos_r, pos_c = i, j # 列内移位函数:将指定列指定行的元素移到列首 def move_to_top(matrix, target_r, target_c): target_val = matrix[target_r][target_c] # 从目标位置往上逐行后移元素 for i in range(target_r, 0, -1): matrix[i][target_c] = matrix[i-1][target_c] matrix[0][target_c] = target_val # 先调整两个目标列的内部顺序 move_to_top(nums, neg_r, neg_c) move_to_top(nums, pos_r, pos_c) # 交换两个目标列的位置 for i in range(rows): nums[i][neg_c], nums[i][pos_c] = nums[i][pos_c], nums[i][neg_c] print("处理后矩阵:") for row in nums: print(row)
逻辑说明
- 随机数生成使用
random.randint(-9,9),覆盖-9到9的所有整数,完全符合不包含±10边界的要求 - 单次双层遍历即可完成全局最大负元素、最小正元素的定位,时间复杂度为O(m*n)
- 列内移位采用原地调整方式,不需要额外开辟整列的存储空间
- 列交换按行逐次交换两个列对应位置的元素,直接在原矩阵上完成修改,若两个目标列为同一列,交换操作不会产生异常影响
内容的提问来源于stack exchange,提问作者Kamel Avad
相关产品推荐
相关产品推荐

