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

如何将元素列表转换为与目标元组列表结构匹配的元组列表?

问题

给定两个列表:

L = [("a0","a1"),("b0",),("b1","a1","b0"),("a0","a1"),("b0",)]
M = ["u0", "u1", "u2", "u3", "u4", "u5", "u6", "u7" , "u8"]

需要将列表M的元素分组为元组列表N,满足以下两个条件:

  • 每个元组的长度与L中对应位置的元组长度完全匹配,即all(len(L[i]) == len(N[i]) for i in range(len(L)))
  • 将N展开后得到的列表与M完全一致,即M == [item for t in N for item in t]

最终期望生成的N为:

N = [("u0", "u1"), ("u2",), ("u3", "u4", "u5"), ("u6", "u7") , ("u8",)]
解决方案

方法一:使用迭代器(推荐)

借助Python迭代器的特性,逐个从M中提取对应长度的元素组成元组,无需提前计算索引,代码简洁且内存效率更高:

L = [("a0","a1"),("b0",),("b1","a1","b0"),("a0","a1"),("b0",)]
M = ["u0", "u1", "u2", "u3", "u4", "u5", "u6", "u7" , "u8"]

it = iter(M)
N = [tuple(next(it) for _ in range(length)) for length in map(len, L)]

print(N)

运行输出:

[('u0', 'u1'), ('u2',), ('u3', 'u4', 'u5'), ('u6', 'u7'), ('u8',)]

方法二:通过切片索引分组

通过累计长度的方式,确定每个元组在M中的切片范围,逻辑直观易懂:

L = [("a0","a1"),("b0",),("b1","a1","b0"),("a0","a1"),("b0",)]
M = ["u0", "u1", "u2", "u3", "u4", "u5", "u6", "u7" , "u8"]

current_idx = 0
N = []
for elem in L:
    group_len = len(elem)
    N.append(tuple(M[current_idx:current_idx + group_len]))
    current_idx += group_len

print(N)

运行结果与方法一完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 01:50:35