Skip to main content
 首页 » 编程设计

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

2025年05月04日20telwanggs

这个问题可能比我说的要简单。听说过 3 列总共有 8 个值的 2 值真值表吗? TTT, TTF... 和 2 列有 4 个值的 2 值真值表? 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 行作为 lists 的 list 或 pandas DataFrame 或 numpy 数组返回 我可以迭代

请您参考如下方法:

您可以使用 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')]