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

Python实现read_input读取CSV返回嵌套子列表的总列表问题求解

原代码问题梳理
  • 没有封装为需求要求的read_input(fileName)函数,硬编码了文件名,且全局作用域下写return会直接报错
  • 直接用x = i属于引用传递,修改x会改动csv reader返回的原始行数据,后续插入逻辑的位置也完全不符合字段映射要求
  • 没有按规则为每个个体单独构建长度为7的新子列表,导致最终返回的列表元素格式错误
修复后的完整代码
import csv

def read_input(fileName):
    finches = []
    # 用with上下文自动管理文件关闭,无需手动调用close
    with open(fileName, 'r', encoding='utf-8') as f:
        data_reader = csv.reader(f)
        # 如果你的csv有表头,取消下面一行的注释跳过表头
        # next(data_reader)
        a_row = None
        for row in data_reader:
            if row[2] == 'A':
                # 暂存当前个体的等位基因A行数据
                a_row = row
            else:
                # 遇到等位基因B行时,严格按映射规则构建7元素个体子列表
                individual = [
                    a_row[0],  # species
                    a_row[1],  # Individual ID
                    a_row[3],  # alleleA gene
                    row[3],    # alleleB gene
                    a_row[4],  # alleleA beak shape score
                    row[4],    # alleleB beak shape score
                    a_row[5]   # beak type
                ]
                finches.append(individual)
    return finches

# 调用示例
# finches = read_input("finches.csv")
# print(finches)
代码说明
  • 用a_row变量暂存每个个体的等位基因A行数据,遇到对应的B行时直接按索引取值构建新列表,避免了引用修改原数据和插入位置错误的问题
  • 完全匹配需求的字段映射规则,每个子列表固定为7个元素,最终返回的finches就是元素为个体子列表的总列表
  • 用with上下文管理文件操作,避免异常场景下文件未关闭的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 10:36:04