#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. Явное лучше, чем неявное , поэтому я бы рекомендовал использовать обычный цикл вместо этого чудовищного списка.