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

如何自定义实现用户输入矩阵并转换为二维列表

自定义矩阵输入转二维列表的实现与问题修复

原代码的问题分析

你的代码存在两个核心问题:

  • 仅能处理单个字符的数字,遇到多位数(如10、-5)时会将其拆分为多个单独数字,导致结果错误
  • 没有处理输入末尾可能存在的空行(比如输入最后一个;会触发一次空行添加)

修正方案1:保留逐字符遍历逻辑(贴合你的原始写法)

修改逐字符遍历的逻辑,收集连续的数字字符(包括负号),直到遇到分隔符(空格或;),再将收集到的字符转为整数:

user_input = input("Enter a numerical sequence: ")
index_counter = 0
matrix = []
str_len = len(user_input)

while index_counter < str_len:
    row = []
    while index_counter < str_len and user_input[index_counter] != ";":
        # 跳过空格
        if user_input[index_counter] == " ":
            index_counter += 1
            continue
        # 收集连续的数字字符(支持负号)
        num_str = ""
        # 先判断是否是负号
        if user_input[index_counter] == "-":
            num_str += "-"
            index_counter += 1
        # 收集后续的数字字符
        while index_counter < str_len and user_input[index_counter].isdigit():
            num_str += user_input[index_counter]
            index_counter += 1
        # 将收集到的数字字符串转为整数,加入行列表
        if num_str:  # 避免空字符串(比如连续空格的情况)
            row.append(int(num_str))
    # 跳过当前的分号
    if index_counter < str_len:
        index_counter += 1
    # 仅当行不为空时添加到矩阵(避免最后一个分号产生空行)
    if row:
        matrix.append(row)

print(matrix)

测试示例

输入:1 2 3;-4 56 7;89 10 -11;
输出:[[1, 2, 3], [-4, 56, 7], [89, 10, -11]]

修正方案2:使用字符串分割简化逻辑(更高效易读)

如果不想用逐字符遍历,也可以通过字符串分割的方式实现,逻辑更清晰:

user_input = input("Enter a numerical sequence: ")
# 按分号分割行,过滤空行
rows_str = [row for row in user_input.split(";") if row.strip()]
matrix = []
for row_str in rows_str:
    # 按空格分割每个数字,过滤空字符串(处理连续空格)
    nums_str = [num for num in row_str.split(" ") if num.strip()]
    # 转换为整数列表
    row = [int(num) for num in nums_str]
    matrix.append(row)
print(matrix)

测试示例

输入:1 2 3;45 67 89;
输出:[[1, 2, 3], [45, 67, 89]]

内容的提问来源于stack exchange,提问作者Samurai

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 16:55:22