Python实现两个列表对齐打印 为缺失值预留空白位置
实现方法
核心思路
用双指针分别遍历两个列表,配合提前构建的元素索引映射实现快速位置判断,全程不需要复杂的嵌套if-else逻辑,也能保证两个列表的元素相对顺序和你给出的示例完全一致。
代码实现
# 示例列表(注意你给出的A/B等元素默认按字符串处理) foo = ['A', 'B', 'C', 'D', 'Z', 'G'] bar = ['A', 'C', 'D', 'E', 'F', 'G', 'X', 'H'] # 提前构建bar的元素-索引映射,优化查询效率 bar_idx = {val: idx for idx, val in enumerate(bar)} i = j = 0 len_foo, len_bar = len(foo), len(bar) while i < len_foo and j < len_bar: if foo[i] == bar[j]: # 元素相同,同步输出 print(f"| {foo[i]} | {bar[j]} |") i += 1 j += 1 elif bar_idx.get(foo[i], -1) < j: # foo当前元素不在bar剩余段中,仅输出foo元素 print(f"| {foo[i]} | |") i += 1 else: # bar当前元素不在foo剩余段中,仅输出bar元素 print(f"| | {bar[j]} |") j += 1 # 输出两个列表剩余的未匹配元素 while i < len_foo: print(f"| {foo[i]} | |") i += 1 while j < len_bar: print(f"| | {bar[j]} |") j += 1
运行效果
直接运行上述代码就能得到你给出的示例输出:
| A | A | | B | | | C | C | | D | D | | Z | | | | E | | | F | | G | G | | | X | | | H |
优化说明
如果你的列表存在大量重复元素,可以把索引映射改成存储每个元素出现的索引队列,判断时取对应队列的第一个大于等于j的索引即可,逻辑整体不需要做大的调整。
内容的提问来源于stack exchange,提问作者dragon
相关产品推荐
相关产品推荐

