Python从文本文件生成二维网格遇格式问题,寻求技术帮助
解决方案:从文本文件生成目标二维网格
我来帮你搞定这个问题!你的当前代码输出不符合预期,核心原因是**readlines()会按行读取文件内容**,如果你的文件里每个数字单独占一行(或者你错误地循环了行列表),就会导致每个数字被拆成单独的子列表。我们来一步步修正:
问题分析
你的示例文件内容是2 2 15 20 36 78,但如果文件里每个数字各占一行,readlines()会返回类似['2\n', '2\n', '15\n', ...]的列表,每个元素split()后都会变成单个数字的子列表,最终得到[['2'], ['2'], ['15'],['20'], ['36'],['78']],这显然不是你要的结果。
正确实现步骤
我们需要先把所有数字收集成一个整数列表,再提取行列数,最后按列数分组生成二维网格:
- 读取文件所有内容,拆分出所有数字字符串并转换为整数
- 提取前两个数字作为行数和列数
- 从剩余数字中按每行
列数个元素的规则分组,构建二维网格
完整代码
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
相关产品推荐
相关产品推荐

