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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 22:57:02