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

标签 python python-3.x combinations python-itertools

这个问题可能比我说的要简单。听说过 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 行作为 listslistpandas DataFramenumpy 数组返回 我可以迭代

最佳答案

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

关于Python:生成一个包含 5 列的多值真值表,其中每列可以取一组特定的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52546167/

相关文章:

python - 如何从 SQLAlchemy 中的现有表中获取列名和类型?

python - 简单的。 *在 python 中调用*函数。如何解决返回问题?

python - 在 Python 中创建元组范围的最快方法

r - 如何计算组合数?

java - 列出集合中元素的所有组合

python - 将文本框边缘与图像角对齐

python - 如何阻止 Plotly Scatter 创建不存在的 X 值

python - 如何在 Bokeh 散点图中显示不同颜色的图例?

python - Python Twisted SSL 的证书生成

javascript - 如何打印 DOM 对象的选择器