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

如何将一维列表按两列输出?解决索引越界问题

解决一维列表两列输出的索引越界问题

嘿,我一眼就看到你代码里的问题啦——为啥会报Index out of range?因为你在遍历元素的时候,每次都去取data_list[item+1],但当item走到列表最后一个元素的索引时,item+1就超出列表的最大索引了呀!比如你的data_list有11个元素,最大索引是10,当item=10的时候,item+1=11,这时候肯定找不到对应的元素,直接报错。而且原来的遍历逻辑还会重复处理元素(比如item=1时处理了1和2,item=2又会处理2和3),这完全不是你想要的两列排版效果。

我给你改了代码,同时优化了逻辑,来看看吧:

spacing = '- ' * 25
data_list = [
    "NAMES", 
    "Rudolph S.", 
    "Josef M.", 
    "Joye A.", 
    "Joni M.", 
    "Rachelle L.", 
    "Vena U.", 
    "Efrain L.", 
    "Mee H.", 
    "Tanya E.", 
    "Garrett H."
]

while True:
    fname_prompt = input("First Name: ").strip().capitalize()
    if fname_prompt in ("List", "list", "LIST"):
        # 把表头和内容分开,逻辑更清晰
        header = data_list[0]
        name_list = data_list[1:]
        
        # 打印表头区域
        print(spacing)
        print('{:>27s}'.format(header))
        print(spacing)
        
        # 按每两个元素一组处理,步长设为2避免索引越界
        for i in range(0, len(name_list), 2):
            # 取当前组的第一个名字
            first_name = name_list[i]
            # 如果有第二个名字就取,没有就留空(处理奇数个元素的情况)
            second_name = name_list[i+1] if (i+1) < len(name_list) else ""
            # 格式化输出:左对齐第一个,右对齐第二个
            print('{:<10s}{:>20s}'.format(first_name, second_name))
        # 打印完列表就退出循环,也可以根据需求保留循环
        break
    # 加个退出选项,不然会无限循环哦
    elif fname_prompt == "Exit":
        print("退出程序~")
        break

关键改进点:

  • 分离表头与内容:把data_list[0]单独拿出来当表头,剩下的元素专门处理排版,逻辑更清晰
  • 步长遍历避免越界:用range(0, len(name_list), 2)来按两元素一组遍历,不会出现访问不存在的索引的情况
  • 兼容奇数个元素:判断i+1是否在列表范围内,不存在就给第二个位置留空,保证格式统一
  • 简化格式化逻辑:原来的格式化是嵌套拼接,现在直接在一个格式化字符串里传入两个参数,简洁又不容易出错

这样修改后,你的列表就能完美按两列输出,再也不会报索引越界的错误啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:18:44