-2

これを再帰関数に変換する賢い方法が必要です。D は、a、b、c に一致する必要があるキーを持つ辞書です。

D のキーはランダムな順序の数字にすぎません。特定の順序で並べ替えて、関数「findKeyForLargestValue」で作成するリストに入れる必要があります。

これは私のプリミティブ関数です (すべての種類の辞書で機能するわけではありません)

def findOrder(name,D):
    Order=[name]
    a=findKeyForLargestValue(D[name])
    b=findKeyForLargestValue(D[a])
    c=findKeyForLargestValue(D[b])
    d=findKeyForLargestValue(D[c])
    e=findKeyForLargestValue(D[d])
    f=findKeyForLargestValue(D[e])
    Order.append(a)
    Order.append(b)
    Order.append(c)
    Order.append(d)
    Order.append(e)
    Order.append(f)
    return Order

出力は次のようなリストである必要があります。

['4', '2', '5', '1', '6', '3']

また、任意のタイプの D をループできる必要があります。

4

3 に答える 3

0

findOrder反復する回数を示すパラメーターを追加してから、次のようにします。

def findOrder(name, D, count):
    Order = [name]
    for i in range(count):
        name = findKeyForLargestValue(D[name])
        Order.append(name)
    return Order

これはあなたが望むことをするはずです(私が質問を誤解していない場合)

于 2013-01-03T11:03:13.607 に答える
0
def findOrder(name,D):
    myList = [name]
    for i in xrange(6): 
        new = findKeyForLargestValue(D[myList[-1]])
        myList.append(new)
    return myList         
于 2013-01-03T11:03:41.777 に答える
0

この再帰関数カムが役立つと思います...

Order = []

def findOrder(name, D):
    Order.append(name)
    try:
        other = findKeyForLargestValue(D[name])
    except:
        return
    findOrder(other, D)

findOrder(name, D)
于 2013-01-03T10:59:42.003 に答える