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

Python从文本文件生成二维网格遇格式问题,寻求技术帮助

解决方案:从文本文件生成目标二维网格

我来帮你搞定这个问题!你的当前代码输出不符合预期,核心原因是**readlines()会按行读取文件内容**,如果你的文件里每个数字单独占一行(或者你错误地循环了行列表),就会导致每个数字被拆成单独的子列表。我们来一步步修正:

问题分析

你的示例文件内容是2 2 15 20 36 78,但如果文件里每个数字各占一行,readlines()会返回类似['2\n', '2\n', '15\n', ...]的列表,每个元素split()后都会变成单个数字的子列表,最终得到[['2'], ['2'], ['15'],['20'], ['36'],['78']],这显然不是你要的结果。

正确实现步骤

我们需要先把所有数字收集成一个整数列表,再提取行列数,最后按列数分组生成二维网格:

  1. 读取文件所有内容,拆分出所有数字字符串并转换为整数
  2. 提取前两个数字作为行数和列数
  3. 从剩余数字中按每行列数个元素的规则分组,构建二维网格

完整代码

with open('file.txt', 'r') as f:
    # 读取全部内容,拆分所有空白分隔的数字,转换为整数列表
    all_numbers = list(map(int, f.read().split()))

# 提取行数和列数
rows = all_numbers[0]
cols = all_numbers[1]

# 按列数分组生成网格:从索引2开始,每cols个元素取一次
grid = [all_numbers[2 + i*cols : 2 + (i+1)*cols] for i in range(rows)]

print(grid)

代码运行说明

对于你的示例输入2 2 15 20 36 78:

  • all_numbers会被解析为[2, 2, 15, 20, 36, 78]
  • rows=2,cols=2
  • 列表推导式会循环2次:
    • 当i=0时,取all_numbers[2:4] → [15, 20]
    • 当i=1时,取all_numbers[4:6] → [36, 78]
  • 最终输出就是你期望的[[15, 20], [36, 78]]

额外提示

不管你的文件内容是一行(所有数字用空格分隔)还是多行(每行一个数字),这个代码都能正常工作——因为f.read().split()会忽略所有空白字符(包括换行符),统一拆分出所有数字。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:28:53