【问题标题】:Combining two lists into a cartesian product in a object of another list in Python在Python中将两个列表组合成另一个列表对象中的笛卡尔积
【发布时间】:2021-11-06 03:00:34
【问题描述】:

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

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

# 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 组合这两个列表,但是我该如何处理我的对象呢?

【问题讨论】:

  • 这不是低效的。与分配所有这些对象的成本相比,循环的开销微不足道。
  • 对象的类是更大类的一部分,并且在更大的代码中创建对象,但如果开销很小,那么我想没关系

标签: python python-3.7 itertools


【解决方案1】:

在这种情况下,嵌套循环方法并不是特别低效,但是如果您想使用product 将它作为一个不错的单行器,您可以这样做:

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

【讨论】:

  • 酷,我喜欢漂亮的单衬
猜你喜欢
  • 2021-01-25
  • 2012-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-17
  • 1970-01-01
  • 2021-02-18
  • 2011-05-06
相关资源
最近更新 更多