Python如何用itertools.product将两列表笛卡尔乘积转为自定义类实例列表
解决方案
核心实现思路
直接用标准库itertools.product结合列表推导式即可完成需求,无需手写嵌套for循环,product底层为C实现,执行效率远高于Python层级的嵌套循环。
完整可运行代码
from itertools import product # 已修正原定义中的缩进错误 class MyClass(object): str_a = None str_b = None def __init__(self, str_a, str_b): self.str_a = str_a self.str_b = str_b # 示例输入 a_strings = ["a", "b"] b_strings = ["x", "y", "z"] # 一行生成目标实例列表 result = [MyClass(*pair) for pair in product(a_strings, b_strings)]
验证输出示例
你可以运行下面的代码验证结果是否符合预期:
for item in result: print(f"MyClass('{item.str_a}', '{item.str_b}')")
输出结果:
MyClass('a', 'x') MyClass('a', 'y') MyClass('a', 'z') MyClass('b', 'x') MyClass('b', 'y') MyClass('b', 'z')
代码说明
product(a_strings, b_strings)会生成两个列表的笛卡尔乘积迭代器,按顺序产出所有两两组合的二元组*pair是Python的参数解包语法,会将二元组的两个元素分别作为参数传入MyClass的构造方法- 列表推导式直接遍历
product的产出结果,批量生成MyClass实例组成列表
内容的提问来源于stack exchange,提问作者cdub
相关产品推荐
相关产品推荐

