如何用for循环优化索引列表遍历代码?解决TypeError报错
问题
需要生成如下格式的输出:
Team C RTO 1 Aug 22 Ayu Start: 6:00 AM 1st Break: 7:15 AM Meal: 9:00 AM 2nd Break: 1:00 PM End: 3:00 PM
目前用手动打印列表元素的方式实现,代码冗余:
print(elements_csvdata[2][0]) print(elements_csvdata[2][1]) print(elements_csvdata[3][1]) print(elements_csvdata[2][2] + ": " + elements_csvdata[3][2]) print(elements_csvdata[2][3] + ": " + elements_csvdata[3][3]) print(elements_csvdata[2][4] + ": " + elements_csvdata[3][4]) print(elements_csvdata[2][5] + ": " + elements_csvdata[3][5]) print(elements_csvdata[2][6] + ": " + elements_csvdata[3][6])
尝试用for循环优化时写出以下代码,出现TypeError: 'list' object is not callable错误:
print(elements_csvdata[2][0]) print(elements_csvdata[2][1]) print(elements_csvdata[3][1]) for element in elements_csvdata(1,7): print(elements_csvdata[2][element + 1] + ": " + elements_csvdata[3][element + 1])
已知elements_csvdata是从CSV读取的列表,其中:
elements_csvdata[2]的输出:['Team C RTO', '1 Aug 22', 'Start', '1st Break', 'Meal', '2nd Break', 'End', '2 Aug 22', 'Start', '1st Break', 'Meal', '2nd Break', 'End', '3 Aug 22', 'Start', '1st Break', 'Meal', '2nd Break', 'End', '4 Aug 22', 'Start', '1st Break', 'Meal', '2nd Break', 'End', '5 Aug 22', 'Start', '1st Break', 'Meal', '2nd Break', 'End']elements_csvdata[3]的输出:['1', 'Ayu', '6:00 AM', '7:15 AM', '9:00 AM', '1:00 PM', '3:00 PM', 'Riana', '6:00 AM', '7:15 AM', '9:00 AM', '1:00 PM', '3:00 PM', 'Aria', '6:00 AM', '7:15 AM', '9:00 AM', '1:00 PM', '3:00 PM', 'Aza', '6:00 AM', '7:15 AM', '9:00 AM', '1:00 PM', '3:00 PM', 'Ayu', '6:00 AM', '7:15 AM', '9:00 AM', '1:00 PM', '3:00 PM']
需求:用for循环(或嵌套循环)清理重复代码,实现目标输出。
解决方案
1. 修正循环错误
出错原因是把列表当成函数调用——elements_csvdata(1,7)是函数调用语法,但elements_csvdata是列表,应该用切片语法range(1,7)生成循环的索引范围,避免语法错误。
2. 生成指定日期的输出(1 Aug 22)
针对目标输出,优化后的代码如下:
# 打印固定头部 print(elements_csvdata[2][0]) print(elements_csvdata[2][1]) print(elements_csvdata[3][1]) # 循环打印时段和时间:索引从2到6(对应Start到End) for i in range(2, 7): print(f"{elements_csvdata[2][i]}: {elements_csvdata[3][i]}")
这里用range(2,7)直接覆盖需要的索引(左闭右开,包含2到6),同时用f-string替代字符串拼接,代码更简洁易读。
3. 扩展:批量处理所有日期的排班
如果需要一次性输出所有日期的排班,可以用嵌套循环遍历每个日期块(每个日期块包含1个日期+5个时段):
# 打印团队名称 print(elements_csvdata[2][0]) print() # 每个日期块的长度:1个日期 + 5个时段 = 6个元素 block_size = 6 # 遍历所有日期块的起始索引 for start_idx in range(1, len(elements_csvdata[2]), block_size): # 打印日期和对应人员 print(elements_csvdata[2][start_idx]) print(elements_csvdata[3][start_idx]) # 打印该日期的所有时段 for i in range(start_idx + 1, start_idx + block_size): print(f"{elements_csvdata[2][i]}: {elements_csvdata[3][i]}") print() # 日期之间空行分隔
这段代码会自动处理所有5天的排班,输出格式和单个日期一致,完全避免手动逐个索引打印的冗余。
内容的提问来源于stack exchange,提问作者ayuninotayutu
相关产品推荐
相关产品推荐

