Python随机矩阵如何实现最大负元素列与最小正元素列互换
实现逻辑
- 首先初始化两个关键值的记录变量:因为随机数取值范围是-10到10,所以把全局最大负元素初始值设为-11(小于所有可能生成的负数),全局最小正元素初始值设为11(大于所有可能生成的正数),同时初始化两个变量分别记录这两个元素对应的列索引,初始值为-1。
- 双层遍历矩阵所有元素:
- 遇到小于0的负数时,如果当前值比已记录的最大负元素更大,就更新最大负元素的值,同时同步更新它所在的列索引
- 遇到大于0的正数时,如果当前值比已记录的最小正元素更小,就更新最小正元素的值,同时同步更新它所在的列索引
- 处理特殊边界:如果遍历完成后列索引仍为-1,说明矩阵里不存在对应类型的元素(全正/全负/含0但缺对应类数值),直接给出提示。
- 正常拿到两个目标列索引后,逐行交换这两个列位置的元素,即可得到互换后的矩阵,不会修改原始矩阵数据。
注:代码中列索引从0开始计数,和输入列的顺序一一对应,0值既不纳入负数统计也不纳入正数统计,符合题目规则。
补全后的完整代码
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) print("原始生成的矩阵:") for row in nums: print(row) updatedNums = [] # 初始化记录变量 max_neg = -11 max_neg_col = -1 min_pos = 11 min_pos_col = -1 # 遍历矩阵定位目标元素和对应列 for i in range(rows): for j in range(cols): current_val = nums[i][j] # 处理最大负元素逻辑 if current_val < 0: if current_val > max_neg: max_neg = current_val max_neg_col = j # 处理最小正元素逻辑 if current_val > 0: if current_val < min_pos: min_pos = current_val min_pos_col = j # 边界判断 if max_neg_col == -1: print("\n错误:当前生成的矩阵没有负数元素,无法定位最大负元素所在列") elif min_pos_col == -1: print("\n错误:当前生成的矩阵没有正数元素,无法定位最小正元素所在列") else: # 拷贝原矩阵到新矩阵,避免修改原始数据 updatedNums = [row.copy() for row in nums] # 逐行交换两列元素 for i in range(rows): updatedNums[i][max_neg_col], updatedNums[i][min_pos_col] = updatedNums[i][min_pos_col], updatedNums[i][max_neg_col] # 输出结果 print(f"\n全局最大负元素为 {max_neg},所在列索引为 {max_neg_col}") print(f"全局最小正元素为 {min_pos},所在列索引为 {min_pos_col}") print("\n互换两列后的矩阵:") for row in updatedNums: print(row)
运行示例
某次运行生成原始矩阵如下时:
[-8, -2, 3, 5] [-4, -2, 3, 6]
遍历后得到最大负元素为-2(列索引1),最小正元素为3(列索引2),交换后输出结果为:
[-8, 3, -2, 5] [-4, 3, -2, 6]
内容的提问来源于stack exchange,提问作者Полишук Макс
相关产品推荐
相关产品推荐

