首页 > 解决方案 > 在Python中将两个列表组合成另一个列表对象中的笛卡尔积

问题描述

我正在寻找一种将两个 List[str] 对象制作成适合我班级的笛卡尔积的方法(python 大约一个月的新手)。

我有一个像这样的类和两个字符串列表:

# Sample data but could be any strings really
a_strings = ["a", "b"];
b_strings = ["x", "y", "z"];

并且该类声明如下:

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

我希望输出是这样的:

MyClass("a", "x")
MyClass("a", "y")
MyClass("a", "z")

MyClass("b", "x")
MyClass("b", "y")
MyClass("b", "z")

简单低效的方法是嵌套这样的循环(我不想这样做):

objects: List[MyClass] = []

for a in a_strings:
    for b in b_strings:
        object.append(MyClass(a, b)

我想弄清楚是否有更好的方法来做到这一点:

from itertools import product

我看到了如何使用上面的 itertools 组合这两个列表,但是我该如何处理我的对象呢?

标签: pythonpython-3.7itertools

解决方案


在这种情况下,嵌套循环方法并不是特别低效,但如果你想把它作为一个很好的单线使用product,你可以这样做:

[MyClass(*pair) for pair in product(a_strings, b_strings)]

推荐阅读