0

再帰関数でリストを代入するのに助けが必要です。再帰関数が i番目の反復にある場合、リストの i番目のメンバーに値を割り当てるにはどうすればよいですか?

4

2 に答える 2

0

あなたの質問をよく理解しているかどうかはわかりませんが、次のようなものだと思います。

# put "s" on 2nd position of the list ['l', 'u', 'c', 'a', 's']
# so the result should be ['l', 's', 'c', 'a', 's']

その場合は、Python でそれを行うためのより良い方法があることに注意してください。コードは次のとおりです。

def assign_in_position(elem, my_list, pos):
    first = my_list[0]
    tail = my_list[1:]

    if pos == 0:
        return [elem] + tail

    return [first] + assign_in_position(elem, tail, pos-1)

Python を初めて使用する場合、1 つだけ奇妙なことがあります (スライス、my_list[1:])。この関数も一種のバグがありますが、提案的です。私の最初の例では機能しますが、再帰を学習している場合は、一般的な再帰の問題を検出して解決する方法を学ぶ必要があります。

好奇心から、これは同じタスクの Haskell コードです。

assign_in_pos elem [] _ = [elem]
assign_in_pos elem (_:t) 0 = elem:t
assign_in_pos elem (h:t) pos = h:assign_in_pos elem t (pos-1)
于 2013-06-27T02:13:31.560 に答える
0

iterable を使用して反復を駆動している間は iterable を変更することはできませんが、結果を保持する iterable を簡単に作成して、再帰関数に引数として渡すことができます。

results = []

def recurse(level, results):
   level += 1
   results.append(level)
   if level < 10: recurse(level, results)

print recurse(0, results)
>>> [1,2,3,4,5,6,7,8,9,10]

しかし、この例ではできませんでし

for item in results:
    recurse (item, results)
于 2013-06-27T01:21:26.290 に答える