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

Python实现:将含单元素/元组的多列表合并为元组列表

问题:合并含单个元素或元组的列表

假设有多个长度相同的列表,元素可以是单个值(字符串、数字)或元组,示例如下:

a = ['AA', 'BB', 'CC']
b = [7,8,9]
d = [('TT', 'ZZ'),('UU', 'VV'),('JJ','KK')]
e = [('mm', 'nn'), ('bb', 'vv'), ('uu', 'oo')]

需要合并任意数量的这类列表,最终得到元组列表。但原生zip函数无法满足需求,以下写法都得不到预期结果:

# 这些写法均无效:
print(list(zip(a,b))) # 仅当所有元素都是单个值时有效,遇到元组会出错
print(list(zip(b,*d)))
print(list(zip(*d,*e)))

预期合并结果:

# a与b合并:
[('AA', 7), ('BB', 8), ('CC', 9)]
# a与d合并:
[('AA','TT', 'ZZ'),('BB', 'UU', 'VV'),('CC','JJ','KK')]
# d与e合并:
[('TT', 'ZZ','mm', 'nn'),('UU', 'VV','bb', 'vv'),('JJ','KK','uu', 'oo')]

核心需求:将每个列表的元素统一视为元组(单个值自动转为单元素元组),再将对应位置的元组元素拼接成一个新元组。


解决方案

通用实现函数

核心逻辑:先把每个元素统一转为元组,再对对应位置的元组进行拼接。以下是两种实现方式:

基础循环版(可读性高)

def merge_lists(*lists):
    result = []
    # 遍历所有列表的对应位置元素组
    for items in zip(*lists):
        merged_tuple = ()
        for item in items:
            # 单个元素转成单元素元组,元组则直接拼接
            merged_tuple += (item,) if not isinstance(item, tuple) else item
        result.append(merged_tuple)
    return result

列表推导式版(简洁)

def merge_lists(*lists):
    return [
        tuple(elem for item in items for elem in ((item,) if not isinstance(item, tuple) else item))
        for items in zip(*lists)
    ]

测试验证

# 测试a+b合并
print(merge_lists(a, b))
# 输出:[('AA', 7), ('BB', 8), ('CC', 9)]

# 测试a+d合并
print(merge_lists(a, d))
# 输出:[('AA', 'TT', 'ZZ'), ('BB', 'UU', 'VV'), ('CC', 'JJ', 'KK')]

# 测试d+e合并
print(merge_lists(d, e))
# 输出:[('TT', 'ZZ', 'mm', 'nn'), ('UU', 'VV', 'bb', 'vv'), ('JJ', 'KK', 'uu', 'oo')]

# 支持合并多个列表
print(merge_lists(a, b, d))
# 输出:[('AA', 7, 'TT', 'ZZ'), ('BB', 8, 'UU', 'VV'), ('CC', 9, 'JJ', 'KK')]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 23:20:28