ここでは、任意の奥行きリストリストのリストで動作するソリューションです。それはitertools.count
、リストの理解と再帰を使用します。
import random
import itertools
def create(minchld = 2, mxchld = 4, p0 = 0.5, mxdpth = 4):
return [0 if mxdpth==0 or random.random() < p0 else create(minchld, mxchld, p0, mxdpth-1)
for i in range(random.randint(minchld, mxchld))]
def fill(zeros):
odd = itertools.count(start=1, step=2)
def replace(zeros):
return [next(odd) if i==0 else replace(i) for i in zeros]
return replace(zeros)
zeros = create()
print(zeros)
print(fill(zeros))
サンプルの実行:
# [[0, 0, [0, 0, 0]], 0, [0, 0, [[0, 0, [0, 0]], [[0, 0, 0], 0, 0], 0, 0], 0], 0]
# [[1, 3, [5, 7, 9]], 11, [13, 15, [[17, 19, [21, 23]], [[25, 27, 29], 31, 33], 35, 37], 39], 41]
# [0, [0, [0, [0, 0]]]]
# [1, [3, [5, [7, 9]]]]
# [[[0, [0, [0, 0]], [[0, 0, 0, 0], 0], [[0, 0], 0]], 0, 0, [[[0, 0, 0], [0, 0, 0, 0], [0, 0, 0], [0, 0, 0]], 0, 0]], 0]
# [[[1, [3, [5, 7]], [[9, 11, 13, 15], 17], [[19, 21], 23]], 25, 27, [[[29, 31, 33], [35, 37, 39, 41], [43, 45, 47], [49, 51, 53]], 55, 57]], 59]
私はここで任意の '[[0]、[0、0]、[0,0,0]と等]'入力が表示されません。 ..何について質問がありますか? – Julien