Python:生成一个包含5列的多值真值表,其中每列可以采用一组特定的值

imp*_*rme 1 python combinations python-itertools python-3.x

问题可能比我听起来更简单.听说2个值真值表有3列,共有8个值吗?TTT, TTF...2个值真值表,2列有4个值?TT, TF, FF, FT

在我的问题:

共有5列.

A, B, C, D, E

A只能1取值:a

B可以2取值: xy

C可以3取值1,23(值可以是字符串或整数,数据类型无关紧要.

D可以采取2的值tf 最终

E可以采取3的值alpha,并omegabeta

所以总共会有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)
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

我不确定是否有更简单,更简洁的方法来做到这一点..我想知道是否有..

我可以接受的36行返回作为listlistspandas DataFrame或者numpy array,我可以遍历

Joe*_*ten 5

您可以使用itertools中的产品为您列出元组:

输入:

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

输出:

[('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')]
Run Code Online (Sandbox Code Playgroud)