Комбинации Python с заменой со случайным размещением значений (список)

Я пытаюсь создать список комбинаций из списка ([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]

Как рандомизировать значения комбинации? Кроме того, мне нужно ограничить количество нулей в комбинации до 6.

Eg:

"(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)"

не должно генерироваться.


person Ankita Gupta    schedule 07.02.2017    source источник


Ответы (1)


Просто перетасуйте список.

import random

# .. code
random.shuffle(your_list)  # It does the shuffle inplace.
person Denis Olehov    schedule 07.02.2017
comment
Спасибо. это помогло. :) - person Ankita Gupta; 07.02.2017