Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: Ankita GuptaОтветов: 1

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

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

pythoncombinations

Ответы

Ответ 1 · рейтинг 1 · Denis Olehov

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

import random

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы