Python中按指定位置格式化打印列表:补全输出与代码优化
问题解决与优化方案
一、补全原代码的剩余元素
原代码的核心问题是:外层循环仅遍历y中的指定位置,处理完最后一个指定位置(第3位)后,就停止了后续元素的处理。只需在遍历完y的所有元素后,追加x中剩余的元素即可:
修改后的完整代码:
x=[23,45,67,89,56] y=[1,3] p="" a=0 for i in y: for v in range(a,len(x)): a+=1 if (v+1)==i: n=x[v] p+= " "+"'{}'".format(n) break else: n=x[v] p+= " "+"{}".format(n) # 追加剩余未处理的元素 for v in range(a, len(x)): p += " " + "{}".format(x[v]) print('{0: <18}{1}'.format("Numbers:",p))
运行后即可得到预期输出:Numbers: '23' 45 '67' 89 56
二、更简洁的实现方式
嵌套循环的写法冗余且效率低,直接遍历x的元素和位置,判断是否需要加引号即可:
方式1:枚举遍历(可读性优先)
x = [23,45,67,89,56] y = {1,3} # 转集合,成员查询效率更高 elements = [] # 用enumerate直接获取1-based的位置 for pos, num in enumerate(x, start=1): if pos in y: elements.append(f"'{num}'") else: elements.append(str(num)) # 拼接输出 print(f"{'Numbers:': <18}{' '.join(elements)}")
方式2:生成式一行搞定(简洁优先)
x = [23,45,67,89,56] y = {1,3} result = ' '.join(f"'{n}'" if pos in y else str(n) for pos, n in enumerate(x, start=1)) print(f"{'Numbers:': <18}{result}")
将y转为集合是为了优化查询速度,当y包含大量元素时,集合的O(1)查询远快于列表的O(n)查询。
内容的提问来源于stack exchange,提问作者SET Srkians
相关产品推荐
相关产品推荐

