如何用一行代码实现二维列表与一维列表的笛卡尔积合并?
优化实现方案
针对你的需求,这里提供几种更简洁优雅的一行代码实现方式:
1. Pythonic列表推导式(推荐)
这是最直观且贴合数学笛卡尔积逻辑的写法,无需额外转换列表,直接通过嵌套遍历生成结果:
[sub_lst + [item] for sub_lst in lst1 for item in lst2]
逻辑说明:遍历lst1中的每个子列表sub_lst,再遍历lst2中的每个元素item,将sub_lst与[item]拼接,最终生成所有笛卡尔积组合。
2. 基于itertools.product的优化写法
如果坚持使用itertools,可以省去提前转换lst2的步骤,直接在映射逻辑中处理元素拼接:
import itertools list(map(lambda pair: pair[0] + [pair[1]], itertools.product(lst1, lst2)))
这里itertools.product(lst1, lst2)会生成(子列表, 元素)的元组对,通过lambda直接将元组中的子列表与单元素列表拼接,避免了额外的列表转换操作。
关于工具库的选择
itertools是处理迭代器和组合逻辑的标准库,完全适用于这类场景,但列表推导式在这种简单的笛卡尔积拼接需求下,写法更简洁、可读性更强,更符合Python的惯用风格。
内容的提问来源于stack exchange,提问作者Leggy
相关产品推荐
相关产品推荐

