随机放置值替换的Python组合(列表)

时间:2017-02-07 07:52:34

标签: python combinations

我正在尝试从列表中创建一个组合列表([0,1,2,4,6])。 我希望组合12个值。

Eg: 
"(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2)"
"(0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2)"
"(0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4)"
"(0, 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2)"
"(0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 4)"
"(0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 2)"
"(0, 0, 0, 1, 1, 1, 1, 1, 1, 2, 2, 4)"
"(0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 6)"
"(0, 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, 2)"

这是完美的工作,但现在我想做的是每个输出中这些值的位置应该是随机的。 类似的东西:

"(0, 0, 0, 0, 1, 1, 2, 2, 2, 2, 2, 2)" should be "(2, 0, 2, 0, 1, 2, 2, 0, 2, 1, 2, 0)"

这是我写的代码。

combinations_list = [comb for i in range(1, 13) for comb in combinations_with_replacement(numbers, i) if sum(comb) == match_points]

其中match_points可以是任何数字。比如说,对于上面的输出,match_points是14.而数字= [0,1,2,4,6]

如何随机化组合值?另外,我需要将组合中的0的数量限制为6。

例如:

"(0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 6, 6)"
"(0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 6)"
"(0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 6, 6)"

不应生成。

1 个答案:

答案 0 :(得分:1)

只需shuffle您的清单。

import random

# .. code
random.shuffle(your_list)  # It does the shuffle inplace.