Представлять все возможные комбинации цифр в списке [закрыто] ⇐ Python

Программы на Python
Anonymous
Представлять все возможные комбинации цифр в списке [закрыто]

Сообщение Anonymous »

Я ищу функцию, которая, учитывая длину числа n, где f(n) возвращает список всех возможных комбинаций цифр в числах длины n.Я хотел бы представить все n-значные числа (меня просто волнует состав) в массиве. Например, для однозначных чисел ожидаемый результат будет следующим:

Код: Выделить всё

[1,0,0,0,0,0,0,0,0,0] -> 0
[0,1,0,0,0,0,0,0,0,0] -> 1
[0,0,1,0,0,0,0,0,0,0] -> 2
[0,0,0,1,0,0,0,0,0,0] -> 3
[0,0,0,0,1,0,0,0,0,0] -> 4
[0,0,0,0,0,1,0,0,0,0] -> 5
[0,0,0,0,0,0,1,0,0,0] -> 6
[0,0,0,0,0,0,0,1,0,0] -> 7
[0,0,0,0,0,0,0,0,1,0] -> 8
[0,0,0,0,0,0,0,0,0,1] -> 9
И 91, и 19 будут представлены как:

Код: Выделить всё

[0,1,0,0,0,0,0,0,0,1]
11 станет:

Код: Выделить всё

[0,2,0,0,0,0,0,0,0,0]
и так далее.
Другими словами, 10-значное число будет набором всех массивов, сумма чисел которых дает 10.
Я пробовал писать вложенные циклы for, которые подсчитывают текущую сумму в массиве, но это не гибко в отношении изменения n.
Другой способ — получить все комбинации следующим образом:

Код: Выделить всё

from itertools import combinations_with_replacement

l=list(combinations_with_replacement(range(10),))

а затем преобразуйте их в «мой стиль»...

Код: Выделить всё

def list_to_count_dict(l:list)->dict:
counts=[0,0,0,0,0,0,0,0,0,0]
for item in l:
counts[item]+=1
return counts

ir=set(tuple(list_to_count_dict(lst)) for lst in l)

[list(r) for r in ir]
Но тогда это потребует тонны памяти, поскольку приведет к появлению дубликатов. Затем я мог бы уменьшить его обратно, используя set() для списков (или для кортежей, а не для списков). Это именно то, чего я хочу избежать, используя такое «разреженное» представление, которое становится выгоднее, чем больше n

Это несколько связано с этим вопросом, но меня волнует порядок, поскольку массив — это всего лишь представление.

Я ищу код, который может генерировать такие списки для заданного n, если возможно, в виде итератора, так как мне нужно выполнять над ними операции.

Подробнее здесь: https://stackoverflow.com/questions/790 ... -in-a-list

Вернуться в «Python»