Я пытаюсь построить функцию, которая:
- принимает в качестве аргумента список натуральных чисел длины n, а
- возвращает список всех списков длины nсостоящий из неотрицательных целых чисел со следующим свойством:
- для списка
lst
он содержит, что для всех индексов i, lst[i] ≤ upper bound[i]
ДляНапример, если список ввода был [1, 1, 2]
, то вывод был бы
[ [ 0 , 0 , 0 ] ,
[ 0 , 0 , 1 ] ,
[ 0 , 0 , 2 ] ,
[ 0 , 1 , 0 ] ,
[ 0 , 1 , 1 ] ,
[ 0 , 1 , 2 ] ,
[ 1 , 0 , 0 ] ,
[ 1 , 0 , 1 ] ,
[ 1 , 0 , 2 ] ,
[ 1 , 1 , 0 ] ,
[ 1 , 1 , 1 ] ,
[ 1 , 1 , 2 ] , ]
Вот как далеко я получил:
def bounded_list(ub):
f = len(ub) * [0]
l = ub
res = [f]
while res[-1] != l:
res += [lex_suc1(res[-1], ub)]
return res
def lex_suc1(lst, ub):
res = lst[:]
i = len(res) - 1
while res[i] == ub[i]:
res[i] = 0
i -= 1
res[i] = ub[i]
return res
, который дает вывод:
[[0, 0, 0],
[0, 0, 2],
[0, 1, 0],
[0, 1, 2],
[1, 0, 0],
[1, 0, 2],
[1, 1, 0],
[1, 1, 2]]
Я не могу понять, как включить недостающие списки, любая помощь будет полезна.