Python新手求助:如何合并所有元素的bit score输出结果
解决你的列表合并输出问题
嘿,我完全懂你遇到的麻烦啦!你现在的代码每次循环都会重新创建一个空的final列表,所以每处理一个数字就会输出一个单独的小列表,而不是把所有结果汇总到一起。咱们只需要做几个小改动就能搞定~
问题核心
你把final = []写在了for循环内部,这意味着每次循环开始时,final都会被重置为空列表。所以每次处理完一个数字,final里只有当前的结果,打印出来就是单独的列表。
修复方案
把final = []移到for循环的外面,这样整个循环过程中我们都用同一个列表来存储所有结果。另外,你代码里有很多重复的字符串转整数的逻辑,咱们可以把它简化一下,让代码更清爽。
修改后的完整代码:
def process_result(e): # 把e转成数字列表,处理后返回最终整数 digits = list(map(int, str(e))) if len(digits) > 2: del digits[0] return int(''.join(map(str, digits))) # 读取输入列表 a = list(map(int, input().strip().split())) final = [] # 把final初始化移到循环外面! for num in a: # 拆分当前数字的各位并排序 num_digits = list(map(int, str(num))) num_digits.sort() # 计算e e = num_digits[0] * 7 + num_digits[-1] * 11 # 处理e并加入final列表 final.append(process_result(e)) # 输出合并后的结果,用空格分隔 print(' '.join(map(str, final)))
关键改动说明
- 移动
final初始化位置:现在final在循环前创建,所有结果都会追加到同一个列表里,不会被重置。 - 提取重复逻辑为函数:把处理
e的代码写成process_result函数,避免重复写相同的字符串转换代码,让代码更易读和维护。 - 统一输出:循环结束后一次性输出整个
final列表,转成空格分隔的字符串,正好是你想要的58 12这种格式。
测试一下
输入234 567时:
- 处理234:各位排序后是
[2,3,4],e=27+411=58,直接加入final。 - 处理567:各位排序后是
[5,6,7],e=57+711=112,删除最高位1后得到12,加入final。 - 最终输出:
58 12,完美符合你的需求!
内容的提问来源于stack exchange,提问作者Safiya Hamid
相关产品推荐
相关产品推荐

