Python 排列 - 获得带条件的全套结果

Python Permutations - Obtaining full set of outcomes with conditions

我有以下采用布尔值的变量列表:

outcome_value=['A','B','C']
outcome_type=[True,False]

我想获取三个变量的可能结果的完整列表。 我想要的条件是当 A=True 然后 B,C = False;当 B=True 时其他等于 False 等等。换句话说:

outcomes_all = [(True, False, False), (False, True, False), (False, False, True)]

我可以使用什么代码来获取以上内容?请注意,这是对我想要做的事情的简化,我希望获得可用于扩展到更复杂的结果列表的代码。

目前我唯一能想到的就是下面这些

import random
        for o in outcome_value:
            p=random.choice(outcome_type)
            print(p)

这当然只会产生一组 True False 值,并且可以产生多个我不想要的 True 值。我也一直在尝试构建 if 语句,但将 运行 留在了死胡同里。

有没有人知道如何做到这一点?还没有看到有类似问题的帖子。

谢谢


编辑:我想我的问题可能过于简单化了,所以 post 一个更复杂的例子

outcome_value=['A','B','C','D','E','F']
outcome_type=[True,False]

我正在寻找 True 和 False 的所有可能排列,但想指定条件,例如:

    A的
  1. outcome_type不能等于B的outcome_type,C和D,E和F也一样

  2. 如果 A=True,则 C、E 必须等于 False(此外还满足 B 的条件 1)

  3. if C=True, A,E=False(除了满足 D 的条件 1)

  4. if E=True, A,C=False(除了满足 F 的条件 1)

因此最终结果如下:

[(True, False, False, True ,False ,True), (False, True, False, False, False ,True), (False, False, True, True, True, False)]

希望这是有道理的。

我不确定您是否涵盖了问题中的所有情况,但如果您只想在每个位置的三重奏中寻找一个真值,您可以这样做:

outcome_value = ['A','B','C']
outcome_type  = [True,False]

outcomes_all = [ tuple(outcome_type[t!=p] for t in outcome_value) for p in outcome_value ]

# [(True, False, False), (False, True, False), (False, False, True)]

这很简单,但我怀疑它的含义远不止于此。鉴于您请求的是 完整 列表,随机不应发挥作用。

你的意思是这样?

import itertools
outcome_value=['A','B','C']

outcome_value = False,False,True

combin = itertools.permutations(outcome_value,3)

print(list(combin))

这是输出

[(False, False, True), (False, True, False), (False, False, True), (False, True, False), (True, False, False), (True, False, False)]

您可以通过过滤掉笛卡尔积来获取值列表:

from itertools import product
outcomes_all = list(filter(
    lambda x: sum(x) == 1,
    product(outcome_type, repeat=3)
))

这将是输出:

>>> outcomes_all
[(True, False, False), (False, True, False), (False, False, True)]