Цель состоит в том, чтобы получить списки рассылки, которые позволяют, например, протестировать сценарий ios путем взвешивания переменных с различными знакомыми весами, сумма которых равна 100 (и, следовательно, ассимилируется в процентах).
метод, который я предлагаю ниже, работает, но не может быть лучшим. Не стесняйтесь предлагать какие-либо улучшения.
Функция для целочисленных композиций на n частей:
def comppercents(n): y = [0] * n y[0] = 100 while True: yield(y) v = y[-1] if (100 ==v ): break y[-1] = 0 j = -2 while (0==y[j]): j -= 1 y[j] -= 10 y[j+1] = 10 + v for x in comppercents(3): print(x) [100, 0, 0] [90, 10, 0] [90, 0, 10] [80, 20, 0] ... [0, 20, 80] [0, 10, 90] [0, 0, 100]
(66 вариантов)
Пример:
comb_100(3)
Вывод:
[[10, 10, 80], [10, 20, 70], [10, 30, 60], [10, 40, 50], [10, 90, 0], [20, 20, 60], [20, 30, 50], [20, 40, 40], [20, 80, 0], [30, 30, 40], [30, 70, 0], [40, 60, 0], [50, 50, 0], [100, 0, 0]]