Python: создание многозначной таблицы истинности из 5 столбцов, где каждый столбец может принимать определенный набор значений - PullRequest
0 голосов
/ 28 сентября 2018

Проблема, вероятно, проще, чем я ее озвучиваю.Слышал 2 таблицы истинности значений с 3 столбцами, имеющими в общей сложности 8 значений?TTT, TTF... и таблица истинности 2 значений с 2 ​​столбцами, имеющими 4 значения?TT, TF, FF, FT

В моей задаче:

Есть 5 столбцов.

A, B, C, D, E

Столбец A может принимать только значение 1: a

Столбец B может принимать 2 значения: x и y

Столбец C может принимать 3 значения 1, 2 и 3, (Значение может быть строковым или целым, тип данных не имеет значения.

Столбец D может принимать 2 значения t и f и, наконец,

Столбец E может принимать 3 значения alpha и omega и beta

Таким образом, всего будет 36 комбинаций! (1 X 2 X 3 X 2 X 3) = 36

Что я сделал до сих пор?

Я придумала эту мерзость .. Результат, который я желаю получить, запустив это ниже:

col1 = ['a']
col2 = ['x', 'y']
col3 = ['1', '2', '3']
col4 = ['t', 'f']
col5 = ['alpha', 'omega', 'beta']

for i in col1:
    for j in col2:
        for k in col3:
            for l in col4:
                for m in col5:
                    print(i, j, k, l, m)

36 строк ..

a x 1 t alpha
a x 1 t omega
a x 1 t beta
a x 1 f alpha
a x 1 f omega
a x 1 f beta
a x 2 t alpha
a x 2 t omega
a x 2 t beta
a x 2 f alpha
a x 2 f omega
a x 2 f beta
a x 3 t alpha
a x 3 t omega
a x 3 t beta
a x 3 f alpha
a x 3 f omega
a x 3 f beta
a y 1 t alpha
a y 1 t omega
a y 1 t beta
a y 1 f alpha
a y 1 f omega
a y 1 f beta
a y 2 t alpha
a y 2 t omega
a y 2 t beta
a y 2 f alpha
a y 2 f omega
a y 2 f beta
a y 3 t alpha
a y 3 t omega
a y 3 t beta
a y 3 f alpha
a y 3 f omega
a y 3 f beta

Я не уверен, есть ли какой-нибудь более простой, менее многословный способ сделать это .. Мне интересно, есть ли ..

Я в порядке с 36 строками, возвращаемыми как list из lists или pandas DataFrame или numpy array, что я могу это сделатьболее 1063 *

1 Ответ

0 голосов
/ 28 сентября 2018

Вы можете использовать продукт из itertools, чтобы получить список кортежей:

Ввод:

import itertools
lst = [['a'],['x', 'y'],['1', '2', '3'],['t', 'f'],['alpha', 'omega', 'beta']]
list(itertools.product(*lst))

Выход:

[('a', 'x', '1', 't', 'alpha'),
 ('a', 'x', '1', 't', 'omega'),
 ('a', 'x', '1', 't', 'beta'),
 ('a', 'x', '1', 'f', 'alpha'),
 ('a', 'x', '1', 'f', 'omega'),
 ('a', 'x', '1', 'f', 'beta'),
 ('a', 'x', '2', 't', 'alpha'),
 ('a', 'x', '2', 't', 'omega'),
 ('a', 'x', '2', 't', 'beta'),
 ('a', 'x', '2', 'f', 'alpha'),
 ('a', 'x', '2', 'f', 'omega'),
 ('a', 'x', '2', 'f', 'beta'),
 ('a', 'x', '3', 't', 'alpha'),
 ('a', 'x', '3', 't', 'omega'),
 ('a', 'x', '3', 't', 'beta'),
 ('a', 'x', '3', 'f', 'alpha'),
 ('a', 'x', '3', 'f', 'omega'),
 ('a', 'x', '3', 'f', 'beta'),
 ('a', 'y', '1', 't', 'alpha'),
 ('a', 'y', '1', 't', 'omega'),
 ('a', 'y', '1', 't', 'beta'),
 ('a', 'y', '1', 'f', 'alpha'),
 ('a', 'y', '1', 'f', 'omega'),
 ('a', 'y', '1', 'f', 'beta'),
 ('a', 'y', '2', 't', 'alpha'),
 ('a', 'y', '2', 't', 'omega'),
 ('a', 'y', '2', 't', 'beta'),
 ('a', 'y', '2', 'f', 'alpha'),
 ('a', 'y', '2', 'f', 'omega'),
 ('a', 'y', '2', 'f', 'beta'),
 ('a', 'y', '3', 't', 'alpha'),
 ('a', 'y', '3', 't', 'omega'),
 ('a', 'y', '3', 't', 'beta'),
 ('a', 'y', '3', 'f', 'alpha'),
 ('a', 'y', '3', 'f', 'omega'),
 ('a', 'y', '3', 'f', 'beta')]
...