代码之家  ›  专栏  ›  技术社区  ›  Matthew Thomas

在每个决策中给出多个选择的所有可能的决策路径/结果

  •  2
  • Matthew Thomas  · 技术社区  · 4 月前

    鉴于我正在迭代压缩在一起的多个元素列表,我需要创建所有可能的结果,因为每次迭代只能从单个列表中选择一个元素。

    示例输入1:

    a = [3,19,13]
    b = [20,18,7]
    

    示例输出1:

    [[3, 19, 13], [3, 19, 7], [3, 18, 13], [3, 18, 7], [20, 19, 13], [20, 19, 7], [20, 18, 13], [20, 18, 7]]
    

    示例输入2:

    a = ['A','B']
    b = ['C','D']
    

    示例输出2:

    [['A', 'B'], ['A', 'D'], ['C', 'B'], ['C', 'D']]
    

    我很难找到正确的数学术语来准确定义我的要求。我认为排列、组合或笛卡尔积不够正确或精确。

    1 回复  |  直到 4 月前
        1
  •  1
  •   Anerdw    4 月前

    你可以通过计算列表中第n项的集合的乘积来计算这个值。每个集合将包含新列表第n个元素的所有选项,因此所有集合的乘积将是这些选项的所有可能组合。

    在实施方面,您可以使用 zip 将“集合”整理成列表 itertools.product 相册 设置列表 集合/列表。

    import itertools
    
    def get_paths(*iterables):
        return list(itertools.product(*zip(*iterables)))
    
    a = [3,19,13]
    b = [20,18,7]
    
    print(get_paths(a, b))
    
    a = ['A','B']
    b = ['C','D']
    
    print(get_paths(a, b))