Код: Выделить всё
[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
Код: Выделить всё
[0,1,0,0,0,0,0,0,0,1]
Код: Выделить всё
[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]
Это несколько связано с этим вопросом, но меня волнует порядок, поскольку массив — это всего лишь представление.
Я ищу код, который может генерировать такие списки для заданного n, если возможно, в виде итератора, так как мне нужно выполнять над ними операции.
Подробнее здесь: https://stackoverflow.com/questions/790 ... -in-a-list