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

