0

次の問題があります。

まず、次のようなタプルのリストがあります。

[(1,2),(2,3),(4,5),(5,6),(5,7),(5,8),(6,9),(6,10),(7,11),(12,14)]

簡単にするために、各タプルの最初の数値が 2 番目の数値を「制御」するとしましょう (依存関係の解析に慣れている人にとっては、最初の数値はヘッドのインデックスを表し、2 番目の数値は依存のインデックスを表します)。

今私が作成したいのは、引数として anintと上記のリストを取る関数です。この関数は、最初の数値として整数引数を持ち、2 番目の数値を返すすべてのタプルを探す必要があります。次に、関数はこれらの 2 番目の数値をそれぞれ再帰的に取得し、最初の数値として表示されるタプルを調べて、2 番目の数値を返す必要があります。これは、他の 2 番目の番号を取得できなくなるまで続行する必要があります。

よりよく説明するために例を使用します。この関数が入力として数値 5 を受け取るとしましょう。最初の数値として 5 を持つタプルは次のとおり(5,6),(5,7),(5,8)です。最初の結果として、関数は 6,7,8 を取り、それを a に追加する必要がありますlist。ここで、関数は 6,7,8 を考慮し、最初の数字 ( ) として現れるタプルを探し(6,9),(6,10),(7,11)、2 番目の数字 (9,10,11) を返す必要があります。8 はどのタプルにも最初の数として表示されないため、その旅はこの段階で終了します。返される最終的なリストは[6,7,8,9,10,11].

私はそのようなことを試しましたが、うまくいきません:

def foo(start_index, lista_tuples,list_to_return=list()):

    indeces=[x[1] for x in lista_tuples if x[0]==start_index]
    list_to_return.extend(indeces)
    for index in indeces:
              foo(index,lista_tuples,list_to_return)
    return list_to_return

しかし、うまくいきません。誰かが私を助けることができますか?

4

4 に答える 4

0

関数で変更可能なデフォルト値を使用すると問題が発生する理由を説明 しているこのよくある質問を確認する必要があります。

def foo(start_index, lista_tuples):
    return _foo(start_index, lista_tuples, [])

def _foo(start_index, lista_tuples,list_to_return):

    indeces=[x[1] for x in lista_tuples if x[0]==start_index]
    list_to_return.extend(indeces)
    for index in indeces:
              _foo(index,lista_tuples,list_to_return)
    return list_to_return
于 2013-07-26T19:35:21.263 に答える