You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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)
  • 边界场景未覆盖:没有处理矩阵无负数、无正数、两个目标列索引重合的特殊情况,运行时会直接报错
正确实现代码

实现逻辑:

  1. 双层遍历矩阵所有元素,筛选所有负数取最大值、所有正数取最小值,同步记录两个最值对应的列序号
  2. 做边界判断:如果矩阵不存在负数/不存在正数/两个目标列是同一列,直接输出原矩阵即可
  3. 逐行交换两个目标列的元素,输出最终结果
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 00:01:06