一组值的所有唯一组合

AboodXD

如果我有任意数量的元素,每个元素都有一组指定的值,我该怎么做才能从每个元素的集合中获取一个值的所有可能组合?

例如,假设我有:

elems = {"A": (0, 1), "B": (-1, -5)}

我该怎么做才能得到以下内容?

({"A": 0, "B": -1}, {"A": 0, "B": -5}, {"A": 1, "B": -1}, {"A": 1, "B": -5})

输入/输出不需要使用字典,但是我认为这是表示它的最简单方法。假设命令顺序很重要。

我想知道一种方法:

  1. 不要假设示例中只有2个元素。
  2. 不假定所有元素的集合都具有相等的长度。

这有点像列出真值表的所有输入。

缺口

您可以使用嵌套的列表/字典理解,使用itertools.product生成值的所有组合,然后将zip每个结果元组从该结果元组添加到键中,以生成键/值对,以构成每个字典结果。这是您的数据稍微复杂一点的版本:

import itertools

elems = {"A": (0, 1), "B": (-1, -5), "C": (1, 2, 3) }

keys = elems.keys()
res = [dict(zip(keys, p)) for p in itertools.product(*elems.values())]

输出:

[
 {'A': 0, 'B': -1, 'C': 1},
 {'A': 0, 'B': -1, 'C': 2},
 {'A': 0, 'B': -1, 'C': 3},
 {'A': 0, 'B': -5, 'C': 1},
 {'A': 0, 'B': -5, 'C': 2},
 {'A': 0, 'B': -5, 'C': 3},
 {'A': 1, 'B': -1, 'C': 1},
 {'A': 1, 'B': -1, 'C': 2},
 {'A': 1, 'B': -1, 'C': 3},
 {'A': 1, 'B': -5, 'C': 1},
 {'A': 1, 'B': -5, 'C': 2},
 {'A': 1, 'B': -5, 'C': 3}
]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章