如何用Python列表推导式读取文件并生成嵌套列表?
如何用列表推导式读取空行分隔的文件生成嵌套列表
问题场景
输入文件内容格式如下:
10 20 30 50 60 70 80 90 100
需要生成嵌套列表格式的输出:
[['10', '20', '30'], ['50','60','70'], ['80','90','100']]
要求仅使用列表推导式实现,不能使用显式的for循环语句,当前难点是识别空行来创建嵌套结构。
错误尝试分析
你之前的代码仅过滤了空行并将所有非空行放入一维列表,没有按空行分组,因此得到错误的一维输出:
with open('file.txt', 'r') as f: result = [line.strip() for line in f.readlines() if line != '\n'] print(result) # 输出: ['10', '20', '30', '50', '60', '70', '80', '90', '100']
解决方案
通过两层列表推导式实现分组,核心是先按空行分割文件内容为块,再处理每个块内的行:
with open('file.txt', 'r') as f: result = [[line.strip() for line in block.splitlines() if line.strip()] for block in f.read().split('\n\n') if block.strip()] print(result) # 输出: [['10', '20', '30'], ['50', '60', '70'], ['80', '90', '100']]
代码解释
- 读取并分割块:
f.read()读取整个文件内容,split('\n\n')将内容按连续两个换行符(空行)分割成多个组块,每个组块对应一组数字。 - 过滤无效块:
if block.strip()过滤掉文件首尾可能存在的空块,避免生成空的子列表。 - 处理组块内的行:内层列表推导式对每个组块用
splitlines()拆分为单独行,line.strip()去除每行的换行符和空格,同时if line.strip()过滤掉组块内可能存在的空行。
内容的提问来源于stack exchange,提问作者George Katsanos
相关产品推荐
相关产品推荐

