【问题标题】:Python: Generating a multivalued truth table of 5 columns, where each column can take a certain set of valuesPython:生成一个包含 5 列的多值真值表,其中每列可以取一组特定的值
【发布时间】:2018-09-27 23:00:22
【问题描述】:

这个问题可能比我说的要简单。听说过 3 列共有 8 个值的 2 值真值表吗? TTT, TTF... 和 2 列有 4 个值的 2 值真值表? TT, TF, FF, FT

在我的问题中:

有 5 列。

A, B, C, D, E

A 只能取1 值:a

B 可以采用2 值:xy

C可以取3123,(值可以是字符串或整数,数据类型无所谓。

D 可以采用2tf 最后

E 可以采用3alphaomegabeta

所以一共有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 行作为 listlistspandas DataFramenumpy array 返回,我可以迭代

【问题讨论】:

    标签: python python-3.x combinations itertools


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多