Все комбинации из n предметов с длиной l, где n <l - PullRequest
0 голосов
/ 23 февраля 2019

Есть много примеров, как получить все комбинации из n элементов длины l, если l <= n.Но как насчет получения всех комбинаций из n элементов (фи цифр) длины l, где n <l, например: </p>

n = 3 ([0,1,2])
l = 5
sequence to get:
00000
00001
00002
00010
...
22222

Это не проблема для реализации, но я полагаю, что это возможноделать с помощью itertools.Не могу найти как.

Ответы [ 2 ]

0 голосов
/ 23 февраля 2019

Так как этот набор по сути является просто троичной системой счисления, мы можем использовать троичную функцию из здесь

def ternary (n):
    if n == 0:
        return '0'
    nums = []
    while n:
        n, r = divmod(n, 3)
        nums.append(str(r))
    return ''.join(reversed(nums))

И вы можете рассматривать это как массив и повторять егочерез цикл for, который выглядит примерно так:

for i in range(3**5):
    print(ternary(i))
0 голосов
/ 23 февраля 2019

Из документации itertools:

product (range (2), repeat = 3) -> 000 001 010 011 100 101 110 111

Так что для вашегоесли код будет

itertools.product(range(3), repeat=5)
...