从可变大小的列表创建所有组合

时间:2016-03-09 17:45:05

标签: python

给定一个字符串如“xyz”,我想生成所有形式的字典:

return nil

其中{"x": vx, "y": vy, "z": vz} vxvy是1到5之间的整数。

所以在上面的例子中,有125个这样的词典。但字符串可以有不同的长度。

什么是Pythonic方法呢?

1 个答案:

答案 0 :(得分:3)

我很肯定这是重复的,但我现在找不到好的,所以我会回答并将其作为社区维基。使用itertools.product

>>> from itertools import product
>>> s = "xyz"
>>> [dict(zip(s,v)) for v in product(range(1,6),repeat=len(s))]
[{'y': 1, 'x': 1, 'z': 1}, {'y': 1, 'x': 1, 'z': 2}, {'y': 1, 'x': 1, 'z': 3}, {'y': 1, 'x': 1, 'z': 4}, {'y': 1, 'x': 1, 'z': 5}, {'y': 2, 'x': 1, 'z': 1}, {'y': 2, 'x': 1, 'z': 2}, {'y': 2, 'x': 1, 'z': 3}, {'y': 2, 'x': 1, 'z': 4}, {'y': 2, 'x': 1, 'z': 5}, {'y': 3, 'x': 1, 'z': 1}, {'y': 3, 'x': 1, 'z': 2}, {'y': 3, 'x': 1, 'z': 3}, {'y': 3, 'x': 1, 'z': 4}, {'y': 3, 'x': 1, 'z': 5}, {'y': 4, 'x': 1, 'z': 1}, {'y': 4, 'x': 1, 'z': 2}, {'y': 4, 'x': 1, 'z': 3}, {'y': 4, 'x': 1, 'z': 4}, {'y': 4, 'x': 1, 'z': 5}, {'y': 5, 'x': 1, 'z': 1}, {'y': 5, 'x': 1, 'z': 2}, {'y': 5, 'x': 1, 'z': 3}, {'y': 5, 'x': 1, 'z': 4}, {'y': 5, 'x': 1, 'z': 5}, {'y': 1, 'x': 2, 'z': 1}, {'y': 1, 'x': 2, 'z': 2}, {'y': 1, 'x': 2, 'z': 3}, {'y': 1, 'x': 2, 'z': 4}, {'y': 1, 'x': 2, 'z': 5}, {'y': 2, 'x': 2, 'z': 1}, {'y': 2, 'x': 2, 'z': 2}, {'y': 2, 'x': 2, 'z': 3}, {'y': 2, 'x': 2, 'z': 4}, {'y': 2, 'x': 2, 'z': 5}, {'y': 3, 'x': 2, 'z': 1}, {'y': 3, 'x': 2, 'z': 2}, {'y': 3, 'x': 2, 'z': 3}, {'y': 3, 'x': 2, 'z': 4}, {'y': 3, 'x': 2, 'z': 5}, {'y': 4, 'x': 2, 'z': 1}, {'y': 4, 'x': 2, 'z': 2}, {'y': 4, 'x': 2, 'z': 3}, {'y': 4, 'x': 2, 'z': 4}, {'y': 4, 'x': 2, 'z': 5}, {'y': 5, 'x': 2, 'z': 1}, {'y': 5, 'x': 2, 'z': 2}, {'y': 5, 'x': 2, 'z': 3}, {'y': 5, 'x': 2, 'z': 4}, {'y': 5, 'x': 2, 'z': 5}, {'y': 1, 'x': 3, 'z': 1}, {'y': 1, 'x': 3, 'z': 2}, {'y': 1, 'x': 3, 'z': 3}, {'y': 1, 'x': 3, 'z': 4}, {'y': 1, 'x': 3, 'z': 5}, {'y': 2, 'x': 3, 'z': 1}, {'y': 2, 'x': 3, 'z': 2}, {'y': 2, 'x': 3, 'z': 3}, {'y': 2, 'x': 3, 'z': 4}, {'y': 2, 'x': 3, 'z': 5}, {'y': 3, 'x': 3, 'z': 1}, {'y': 3, 'x': 3, 'z': 2}, {'y': 3, 'x': 3, 'z': 3}, {'y': 3, 'x': 3, 'z': 4}, {'y': 3, 'x': 3, 'z': 5}, {'y': 4, 'x': 3, 'z': 1}, {'y': 4, 'x': 3, 'z': 2}, {'y': 4, 'x': 3, 'z': 3}, {'y': 4, 'x': 3, 'z': 4}, {'y': 4, 'x': 3, 'z': 5}, {'y': 5, 'x': 3, 'z': 1}, {'y': 5, 'x': 3, 'z': 2}, {'y': 5, 'x': 3, 'z': 3}, {'y': 5, 'x': 3, 'z': 4}, {'y': 5, 'x': 3, 'z': 5}, {'y': 1, 'x': 4, 'z': 1}, {'y': 1, 'x': 4, 'z': 2}, {'y': 1, 'x': 4, 'z': 3}, {'y': 1, 'x': 4, 'z': 4}, {'y': 1, 'x': 4, 'z': 5}, {'y': 2, 'x': 4, 'z': 1}, {'y': 2, 'x': 4, 'z': 2}, {'y': 2, 'x': 4, 'z': 3}, {'y': 2, 'x': 4, 'z': 4}, {'y': 2, 'x': 4, 'z': 5}, {'y': 3, 'x': 4, 'z': 1}, {'y': 3, 'x': 4, 'z': 2}, {'y': 3, 'x': 4, 'z': 3}, {'y': 3, 'x': 4, 'z': 4}, {'y': 3, 'x': 4, 'z': 5}, {'y': 4, 'x': 4, 'z': 1}, {'y': 4, 'x': 4, 'z': 2}, {'y': 4, 'x': 4, 'z': 3}, {'y': 4, 'x': 4, 'z': 4}, {'y': 4, 'x': 4, 'z': 5}, {'y': 5, 'x': 4, 'z': 1}, {'y': 5, 'x': 4, 'z': 2}, {'y': 5, 'x': 4, 'z': 3}, {'y': 5, 'x': 4, 'z': 4}, {'y': 5, 'x': 4, 'z': 5}, {'y': 1, 'x': 5, 'z': 1}, {'y': 1, 'x': 5, 'z': 2}, {'y': 1, 'x': 5, 'z': 3}, {'y': 1, 'x': 5, 'z': 4}, {'y': 1, 'x': 5, 'z': 5}, {'y': 2, 'x': 5, 'z': 1}, {'y': 2, 'x': 5, 'z': 2}, {'y': 2, 'x': 5, 'z': 3}, {'y': 2, 'x': 5, 'z': 4}, {'y': 2, 'x': 5, 'z': 5}, {'y': 3, 'x': 5, 'z': 1}, {'y': 3, 'x': 5, 'z': 2}, {'y': 3, 'x': 5, 'z': 3}, {'y': 3, 'x': 5, 'z': 4}, {'y': 3, 'x': 5, 'z': 5}, {'y': 4, 'x': 5, 'z': 1}, {'y': 4, 'x': 5, 'z': 2}, {'y': 4, 'x': 5, 'z': 3}, {'y': 4, 'x': 5, 'z': 4}, {'y': 4, 'x': 5, 'z': 5}, {'y': 5, 'x': 5, 'z': 1}, {'y': 5, 'x': 5, 'z': 2}, {'y': 5, 'x': 5, 'z': 3}, {'y': 5, 'x': 5, 'z': 4}, {'y': 5, 'x': 5, 'z': 5}]
>>> len(_)
125

请注意,我们还没有对字符串的长度进行硬编码。