Python — требуется получить полный список перестановок логических значений

#python #list #boolean #permutation

#python #Список #логическое #перестановка

Вопрос:

У меня есть следующий список переменных, которые принимают логическое значение:

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

Я ищу все возможные перестановки True и False, но хочу указать такие условия, как:

outcome_type для A не должен равняться outcome_type для B, то же самое для C и D, E и F

если A= True, то C, E должны быть равны False (в дополнение к условию 1 для B, которое также выполняется)

если C = True, A, E = False (в дополнение к условию 1 для D, которое также выполняется)

если E = True, A, C = False (в дополнение к условию 1 для F, которое также выполняется)

Поэтому конечный результат будет выглядеть следующим образом:

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

Спасибо

Комментарии:

1. Не совсем ясно (по крайней мере, для меня), что означает первое условие. Вы говорите outcome_type of A must not equal outcome_type of B , но ваш конечный кортеж в желаемом результате имеет (False, False, True, True...) вид A == B для меня.

2. да, это была опечатка, спасибо, что заметили. должно быть False True False …

Ответ №1:

Это пример ввода? У вас есть только 6 переменных и 2 ^ 6 = 64. Просто посмотрите на все 64 возможности и отбросьте те, которые не соответствуют вашим критериям.

 [(A, B, C, D, E, F) 
    for A, B, C, D, E, F in itertools.product((True, False), repeat=6)
    if A != B and C != D and E != F
    # Your last three rules are that at most one of A, C, and E are true
    if A   C   E <= 1]
 

Комментарии:

1. Явное лучше, чем неявное , поэтому я бы рекомендовал использовать обычный цикл вместо этого чудовищного списка.