Я должен составить список неупорядоченных комбинаций с ограниченными повторениями, т. Е. Для заданного списка уникальных элементов скажем, что card_set создает все комбинации длины combo_len, с элементом, повторяющимся с максимальным повторением в разы
нижекод для combo_len = 3 и repeat_limit = 2 с card_set = range (5)
обратите внимание, мне нужны неупорядоченные комбинации.т.е. (0,0,1) и (0,1,0) одинаковы, поэтому приведенная ниже ссылка на решение не удовлетворяет моим условиям
В этом посте рассказывается, как получить размеченные комбинациис ограниченным числом повторений
import itertools
import pprint
card_set = list(range(5))
a = sorted(set(itertools.combinations_with_replacement(card_set,3)))
neg = [(i,i,i) for i in card_set]
b = set(a) - set(neg)
print('a###')
pprint.pprint(a)
print('b###')
pprint.pprint(b)
приведенный выше код дает мне неупорядоченные комбинации с ограниченным 2 повторениями, т.е.neg содержит нежелательные повторы (0,0,0) (1,1,1) и т. д., поэтому b = set(a) - set(neg)
дает мне необходимый набор
для combo_len = 3 и repeat_limit = 2, указанный выше код работает.Как мне сделать код для диапазона (13) combo_len = 7 и repeat_limit = 4
Вывод:
a###
[(0, 0, 0),
(0, 0, 1),
(0, 0, 2),
(0, 0, 3),
(0, 0, 4),
(0, 1, 1),
(0, 1, 2),
(0, 1, 3),
(0, 1, 4),
(0, 2, 2),
(0, 2, 3),
(0, 2, 4),
(0, 3, 3),
(0, 3, 4),
(0, 4, 4),
(1, 1, 1),
(1, 1, 2),
(1, 1, 3),
(1, 1, 4),
(1, 2, 2),
(1, 2, 3),
(1, 2, 4),
(1, 3, 3),
(1, 3, 4),
(1, 4, 4),
(2, 2, 2),
(2, 2, 3),
(2, 2, 4),
(2, 3, 3),
(2, 3, 4),
(2, 4, 4),
(3, 3, 3),
(3, 3, 4),
(3, 4, 4),
(4, 4, 4)]
b###
{(0, 0, 1),
(0, 0, 2),
(0, 0, 3),
(0, 0, 4),
(0, 1, 1),
(0, 1, 2),
(0, 1, 3),
(0, 1, 4),
(0, 2, 2),
(0, 2, 3),
(0, 2, 4),
(0, 3, 3),
(0, 3, 4),
(0, 4, 4),
(1, 1, 2),
(1, 1, 3),
(1, 1, 4),
(1, 2, 2),
(1, 2, 3),
(1, 2, 4),
(1, 3, 3),
(1, 3, 4),
(1, 4, 4),
(2, 2, 3),
(2, 2, 4),
(2, 3, 3),
(2, 3, 4),
(2, 4, 4),
(3, 3, 4),
(3, 4, 4)}