Python怎么用input接收用户输入的矩阵

慢慢来
慢慢来
发布时间:2026-11-02| 6人浏览过
原创

详细讲解在Python中使用input函数接收用户输入矩阵的多种实用方法,涵盖已知行数按行输入、单行紧凑输入以及未知行数的终止输入技巧。

在 Python 中,内置函数 input() 默认将用户的整行输入读取为单个字符串。因为 Python 原生并没有专门的“矩阵类型”,通常做法是将矩阵表示为嵌套列表(即列表的列表)。要将用户输入的字符矩阵转换为程序可计算的数值矩阵,核心逻辑分为三步:读取单行字符串、按空格拆分为子串列表、并将每个元素转为整型或浮点型存入列表。本文将分步骤介绍已知行数输入、单行紧凑输入、未知行数输入等典型场景下的具体实现。

Python怎么用input接收用户输入的矩阵
图 1:单行字符串输入解析为数值列表的处理步骤

一、基础方案:已知矩阵行数,按行循环输入

最标准的场景是在输入矩阵前,先明确矩阵包含多少行(例如算法题中通常第一行给出整数 n 表示行数,或者用户在交互提示下输入行数)。此时只需通过 for 循环调用 input() 即可按行收集数据。

1. 逐步展开的常规循环写法

这种写法逻辑最直观,便于初学者在调试时检查每一行的解析情况:

# 示例:接收 n 行矩阵
n = int(input("请输入矩阵的行数: "))
matrix = []

for i in range(n):
    # 接收一行输入,按空格分割并转成整数列表
    row = list(map(int, input().split()))
    matrix.append(row)

print("最终接收到的矩阵:")
print(matrix)

输入示例:

请输入矩阵的行数: 3
1 2 3
4 5 6
7 8 9

输出示例:

最终接收到的矩阵:
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

2. 列表推导式精简写法

在熟悉了基础逻辑后,可以使用 Python 的列表推导式将上述代码压缩为单行。它的运行效率与可读性在 Python 编程实践中都非常高:

n = int(input("请输入矩阵行数: "))
# 列表推导式直接构建二维列表
matrix = [list(map(int, input().split())) for _ in range(n)]
Python怎么用input接收用户输入的矩阵
图 2:连续调用 input() 构建嵌套列表结构示意图

二、进阶场景:未知行数时的输入方案

有时候用户在输入时并不会预先声明矩阵的行数。这时有两种常见的处理策略:约定特定空行作为结束信号,或借助异常捕获读取直到文件末尾(EOF)。

1. 检测空行结束输入(适合控制台交互)

当用户在交互式终端中连续输入矩阵各行,最后直接敲击回车发送空字符串时,程序自动退出循环:

print("请输入矩阵行(每行用空格隔开,直接按回车结束输入):")
matrix = []

while True:
    line = input().strip()
    if not line:
        break
    row = [int(x) for x in line.split()]
    matrix.append(row)

print("接收到的矩阵:", matrix)

2. EOF 异常捕获(适合文件重定向与算法测评)

在算法在线判题平台(OJ)中,输入流末尾通常没有提示,而是触发 EOFError。可以使用 try-except 结构优雅接收:

matrix = []
try:
    while True:
        matrix.append(list(map(int, input().split())))
except EOFError:
    pass

print(f"成功接收了 {len(matrix)} 行矩阵数据")

三、单行完成所有元素输入与矩阵重构

在某些轻量应用场景下,要求用户在同一行内输入所有数据,例如包含分号分隔行,或者一次性输入全部 $n \times m$ 个数值再由程序重构形状。

1. 使用分号分隔各行

用户输入类似于 1 2 3; 4 5 6; 7 8 9 的格式,可以先按分号分割出各行,再按空格解析元素:

raw_input_str = input("请输入矩阵(行之间用分号隔开): ")
# 例如输入: 1 2 3; 4 5 6; 7 8 9
matrix = [
    [int(x) for x in row_str.strip().split()]
    for row_str in raw_input_str.split(';')
    if row_str.strip()
]
print("解析结果:", matrix)

2. 扁平化数据切片重构(已知维度)

如果已知矩阵的尺寸为 $n$ 行 $m$ 列,用户只需连续输入 $n \times m$ 个数字:

n, m = map(int, input("请输入行数和列数(如 2 3): ").split())
flat_data = list(map(int, input(f"请输入全部 {n*m} 个元素(空格隔开): ").split()))

# 切片重构成二维列表
matrix = [flat_data[i * m : (i + 1) * m] for i in range(n)]
print("重构后的矩阵:", matrix)
Python怎么用input接收用户输入的矩阵
图 3:三种常用输入方式的特征与适用环境对照

四、异常处理与数据校验关键要点

在实际控制台交互中,用户可能会输入非数值字符、每行列数不一致等情况。为了保证程序的鲁棒性,需要重点关注以下三个方面:

  • 类型转换错误(ValueError): 当用户输入了字母、符号或留空时,直接调用 int() 或 float() 会抛出 ValueError。在实际业务逻辑中,应使用 try-except 提示用户重新输入当前行。
  • 每行列数校验: 标准矩阵必须保证所有行的列数相等。可以在接收每行时检查 len(row) == m,若不匹配及时报警。
  • 浮点数支持: 如果矩阵元素包含小数,只需将映射函数从 int 换为 float,例如 list(map(float, input().split()))。
Python怎么用input接收用户输入的矩阵
图 4:Python 矩阵输入处理体系与知识结构总结

五、总结与拓展

在日常使用中,最通用且高效的方式是使用列表推导式:[list(map(int, input().split())) for _ in range(n)]。如果是数据科学或工程计算场景,在完成嵌套列表的输入构建后,可以进一步调用 import numpy as np; arr = np.array(matrix) 将其转为 NumPy 数组,从而享受更高效的矩阵乘法、转置以及线性代数运算支持。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。