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

多列表转字符串写入CSV遇循环异常:仅读取最后一个列表

问题分析

你的代码存在几个关键问题,导致仅能读取最后一个列表的内容:

  1. 使用list作为变量名,覆盖了Python内置的list类型,容易引发后续逻辑错误,建议替换为sub_list这类名称。
  2. 字符串拼接逻辑错误:内层循环中每次遍历x时都执行strings += s,会造成重复累加。比如处理列表["a","b"]时,会先把s="a"加入strings,再把s="ab"加入,最终strings里会是"aab"而非预期的"ab"。
  3. 未处理CSV的行分隔,所有内容会堆叠在一起;且未正确关闭文件,可能导致内容未完全写入。
修正方案

手动调整写法

用with语句安全管理文件,同时修正拼接逻辑:

with open("results.csv", "w") as results:
    strings = ""
    for participant in contents:
        for sub_list in participant:
            # 将单个列表的元素拼接成完整字符串
            s = "".join(sub_list)
            # 每个拼接结果作为一行写入,可根据需求替换分隔符
            strings += s + "\n"
    results.write(strings)

如果每个参与者的多个子列表需要作为同一行的不同列,改用逗号分隔:

with open("results.csv", "w") as results:
    for participant in contents:
        # 把当前参与者的所有子列表分别拼接后,用逗号分隔为一行
        row = ",".join(["".join(sub_list) for sub_list in participant])
        results.write(row + "\n")

更规范的CSV模块写法

Python内置的csv模块能自动处理CSV格式细节(比如元素含逗号、引号的情况),更推荐使用:

import csv

with open("results.csv", "w", newline="") as results:
    writer = csv.writer(results)
    for participant in contents:
        # 将每个子列表拼接成字符串,作为一行的单元格
        row = ["".join(sub_list) for sub_list in participant]
        writer.writerow(row)

若不需要拼接子列表,直接将子列表元素作为单元格写入:

import csv

with open("results.csv", "w", newline="") as results:
    writer = csv.writer(results)
    for participant in contents:
        # 把参与者的每个子列表直接作为一行写入
        for sub_list in participant:
            writer.writerow(sub_list)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 23:10:27