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

Python如何不使用ljust/rjust实现多列表内容并排对齐输出

问题根源
  • 原代码对每个列表单独循环赋值,循环结束后a/b/c变量只会保留对应列表的最后一个元素,所以输出全部重复最后一项内容
  • 没有按索引配对四个列表的对应元素,print语句放在了liters的循环内,只有d变量会遍历liters的元素,其他变量均为固定值
  • 未单独处理表头和分割行,列表长度不匹配导致无法对齐输出
修改后代码
def Main():
    # 原始数据
    city = ['City', '________________', 'Boston', 'Montreal', 'Toronto', 'Detroit', 'Mackinaw City', 'Sault Ste. Marie', 'Wawa', 'Marathon', 'Thunder Bay', 'Duluth', 'Minneapolis', 'Fargo', 'Winnipeg', 'Regina', 'Swift Current', 'Medicine Hat', 'Calgary', 'Great Falls', 'Butte', 'Spokane', 'Seattle', 'Vancouver']
    state = ['State/Province', '________________', 'Massachusetts', 'Quebec', 'Ontario', 'Michigan', 'Michigan', 'Ontario', 'Ontario', 'Ontario', 'Ontario', 'Minnesota', 'Minnesota', 'North Dakota', 'Manitoba', 'Saskatachewan', 'Saskatachewan', 'Alberta', 'Alberta', 'Montana', 'Montana', 'Washington', 'Washington', 'British Columbia']
    miles = [0, 310, 335, 237, 292, 53, 132, 116, 169, 191, 156, 237, 218, 357, 156, 144, 191, 278, 155, 318, 282, 168]
    liters = [35.56, 36.23, 24.26, 32.29, 6.47, 14.27, 12.91, 17.77, 20.67, 18.89, 28.96, 25.78, 37.54, 20.36, 17.58, 22.59, 30.74, 19.57, 35.13, 32.37, 21.19]
    
    # 预处理city列表:每个元素补空格到16位
    padded_city = []
    for item in city:
        s = item
        while len(s) < 16:
            s += " "
        padded_city.append(s)
    
    # 预处理state列表:每个元素补空格到16位
    padded_state = []
    for item in state:
        s = item
        while len(s) < 16:
            s += " "
        padded_state.append(s)
    
    # 计算衍生数据:千米、加仑
    kilometers = [x * 1.609344 for x in miles]
    gallons = [x * 3.785411784 for x in liters]
    
    # 预处理数字列表头
    num_headers = ['Miles', 'Kilometers', 'Liters', 'Gallons']
    padded_num_headers = []
    for h in num_headers:
        s = h
        while len(s) < 12:
            s += " "
        padded_num_headers.append(s)
    # 预处理数字列分割线
    num_sep = ['___________', '___________', '___________', '___________']
    padded_num_sep = []
    for s in num_sep:
        t = s
        while len(t) < 12:
            t += " "
        padded_num_sep.append(t)
    
    # 输出表头与分割线
    print(padded_city[0] + padded_state[0] + padded_num_headers[0] + padded_num_headers[1] + padded_num_headers[2] + padded_num_headers[3])
    print(padded_city[1] + padded_state[1] + padded_num_sep[0] + padded_num_sep[1] + padded_num_sep[2] + padded_num_sep[3])
    
    # 逐行输出匹配的对应元素
    for i in range(len(miles)):
        # 取对应索引的城市、省份数据
        city_col = padded_city[i+2]
        state_col = padded_state[i+2]
        # 处理里程列格式
        miles_str = str(miles[i])
        while len(miles_str) < 12:
            miles_str += " "
        # 处理千米列格式,保留1位小数
        km_str = f"{kilometers[i]:.1f}"
        while len(km_str) < 12:
            km_str += " "
        # 处理升数列格式,保留1位小数
        liters_str = f"{liters[i]:.1f}"
        while len(liters_str) < 12:
            liters_str += " "
        # 处理加仑列格式,保留1位小数
        gallons_str = f"{gallons[i]:.1f}"
        while len(gallons_str) < 12:
            gallons_str += " "
        # 输出整行数据
        print(city_col + state_col + miles_str + km_str + liters_str + gallons_str)

if __name__ == "__main__":
    Main()
代码说明
  • 全程使用while循环补空格实现对齐,未使用ljust/rjust方法,符合要求
  • 提前将所有列的元素预处理为固定长度的字符串,保证输出对齐
  • 按索引配对四个列表的对应元素,前两行单独输出表头和分割线,后续逐行输出数据
  • 数字列统一保留1位小数,可读性更高

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 04:45:04