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

Python中循环访问元组列表变量的问题

问题解决方法

你的问题出在**test = 'set'+str(num)**这行代码:这里生成的是字符串(比如'set1'),而非你定义的列表变量set1。遍历字符串会逐个读取字符,自然无法正确解析元组数据。

推荐解决方案(字典存储,规范写法)

用字典把集合和编号对应起来,避免动态拼接变量名的风险:

import csv

set1 = [(1,21,0),(1,20,0),(1,19,0),(1,18,0),(1,17,0)]
set2 = [(2,21,0),(2,20,0),(2,19,0),(2,18,0),(2,17,0),(2,16,0),(2,15,0)]

# 用字典关联编号和对应集合
sets = {
    1: set1,
    2: set2
}

for num in sets:
    test = sets[num]
    # 用f-string简化文件名拼接
    with open(f'test{num}.csv', 'a') as f:
        writer = csv.writer(f)
        for (a,b,c) in test:
            writer.writerow([a,b,c])
# with语句会自动关闭文件,无需手动调用f.close()

备选方案(动态获取变量,不推荐)

如果一定要保留原变量命名方式,可以通过globals()获取全局变量:

import csv

set1 = [(1,21,0),(1,20,0),(1,19,0),(1,18,0),(1,17,0)]
set2 = [(2,21,0),(2,20,0),(2,19,0),(2,18,0),(2,17,0),(2,16,0),(2,15,0)]

setNumber = [1,2]

for num in setNumber:
    # 通过globals()根据字符串获取对应变量
    test = globals()[f'set{num}']
    with open(f'test{num}.csv', 'a') as f:
        writer = csv.writer(f)
        for (a,b,c) in test:
            writer.writerow([a,b,c])

额外注意事项

  • with语句会自动处理文件关闭,无需手动写f.close()(你原代码里还少了括号,正确写法是f.close())
  • 使用f-string(f'test{num}.csv')比字符串拼接更简洁易读

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 00:05:15