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

如何用zip_longest按索引配对嵌套列表,避免交叉组合?

解决不等长嵌套列表的同索引配对问题

问题根源

你的代码使用了双层循环(或列表推导式中的双重遍历),导致claim_num的所有子列表和claim_text的所有子列表进行交叉组合,而非按外层列表的索引一一配对。

解决方案

先通过zip(或zip_longest,处理外层列表长度不等的情况)将claim_num和claim_text的同索引子列表配对,再对每一对子列表使用zip_longest处理内部元素。

代码示例(外层列表长度相等时)

from itertools import zip_longest

claim_text = [['1. A method', '2. The method', '3. Description'],
              ['1. A method', '2. The method', '3. The method', '5. The method']]
claim_num =  [['1', '2'], ['1', '2', '3']]

# 循环写法
combined = []
for num_list, text_list in zip(claim_num, claim_text):
    paired_items = list(zip_longest(num_list, text_list, fillvalue='Description'))
    combined.append(paired_items)

# 列表推导式写法
combined = [list(zip_longest(num_list, text_list, fillvalue='Description')) 
            for num_list, text_list in zip(claim_num, claim_text)]

print(combined)

输出结果

[
    [('1', '1. A method'), ('2', '2. The method'), ('Description', '3. Description')],
    [('1', '1. A method'), ('2', '2. The method'), ('3', '3. The method'), ('Description', '5. The method')]
]

处理外层列表长度不等的情况

如果claim_num和claim_text的外层列表长度不一致,用zip_longest处理外层,指定fillvalue为空白列表:

from itertools import zip_longest

claim_text = [['1. A method', '2. The method'], ['1. A method', '2. The method', '3. Description']]
claim_num =  [['1', '2'], ['1', '2', '3'], ['4', '5']]  # 外层多一个元素

combined = []
for num_list, text_list in zip_longest(claim_num, claim_text, fillvalue=[]):
    paired_items = list(zip_longest(num_list, text_list, fillvalue='Description'))
    combined.append(paired_items)

print(combined)

关键说明

  • zip(claim_num, claim_text):将两个外层列表的同索引子列表一一配对,仅处理到较短列表的长度。
  • zip_longest(num_list, text_list, fillvalue='Description'):对子列表内部元素配对,长度不足的用fillvalue补充。

内容的提问来源于stack exchange,提问作者wiseass

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 15:01:19