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
相关产品推荐
相关产品推荐

