-1

ヨットの最速タイムを計算するプログラムを書いています。4x4 マトリックス、つまり 16 ノードがあります。すべてのノードから、8 つの異なる方向に進むことができます。大きなリストのすべてのノードからすべての方向への移動時間を知っているので、現在は 8*16 文字の長さです。リストの冒頭は次のようになります。

TravelTime = [0.7, 0.5, 10000, 0.5, 0.7, 1.6, 1.3, 1.6, 0.6, 0.5, 0.6, 0.9, 0.6, 0.5, 10000, 10000]...

ここで、最初の 8 つの数字は からのすべての方向の移動時間を示しNode11、次の 8 つの数字は からのすべての方向の時間を示しますNode12。そして、 の最後の情報まで続きNode44ます。たとえば、 からまでTravelTime[0]まっすぐ上る時間を教えてくれます。これを辞書に保存する必要があるので、次のように提示します。Node11Node12

Graph = { 
'Node11': ['Node12', 0.7], ['Node22', 0.5], ['Node21', 10000], ['Node20', 0.5], ['Node10', 0.7], ['Node00', 1.6], ['Node01', 1.3], ['Node02', 1.6], and then it continues for the next Node:
'Node12': ['Node13', 0.6], ['Node23', 0.5], ['Node22', 0.6], ['Node21', 0.9], ['Node11', 0.6], ['Node01', 0.5], ['Node02', 10000], ['Node03', 10000] 
}

「ノード」の後の数字は、ノードの座標と同じです。北への移動から始まり、時計回りに合計 8 つの異なる方向に進みます。

SO: 上記のような辞書を作成する関数はどのように作成すればよいですか?

4

2 に答える 2

1

あなたはコードを提供していないので、私はあなたのためにあなたのソリューション全体を書くつもりはありません。入力データは非常に構造化されています。つまり、すべてが固定長であるため、固定長ループを使用できます。

Graph = {}
for nodeIdx in range(16):
    Node = {}
    for directionIdx in range(8):
        # construct your node list from TravelTime
    nodeNumber = # Figure out nodeNumber
    Graph[nodeNumber] = Node

nodeIdxとに基づいてTravelTimeからインデックスを選択する方法を理解できるはずですdirectionIdx。これが良いスタートであることを願っています。

于 2012-12-04T18:45:43.517 に答える
0

この形式で辞書を出力したいとしましょう。

Graph = { 'Node11':[['Node12':0.7],[ ],..., []] # ディクショナリの各キーに単一のリスト値を割り当てる

}

そして、travelTime は 8*16 の値を持つリストです。

このディクショナリの文字列構成を大まかに処理できます。これは解決策になる可能性があります:

t = TravelTime
movements = [(0,1),(1,1),(1,0),(1,-1),(0,-1),(-1,-1),(-1,0),(-1,1)] # the order of movements described by you

output = '{'
for i in range(1,5):
        for j in range(1,5):
                output+="\n'Node"+str(i)+str(j)+"': [" #the key in the dictionary
                for k in range(8):
                        output+="["+"'Node"+str(i+movements[k][0])+str(j+movements[k][1])+"', "+str(t[((i+j)-2)*8+k])+"],"  #the value of dictonary
                output=output[:-1]+'],'  # remove last comma and close the list bracket
output=output[:-1]+'\n}'    #remove last comma and insert last dictionary bracket

Graph = eval(output)   # last step to use Graph as a dictionary

次のような出力が得られます (入力を 8 回繰り返す):

{'Node11': [['Node12', 0.7], ['Node22', 0.5], ['Node21', 10000], ['Node20', 0.5], ['Node10', 0.7], ['Node00', 1.6], ['Node01', 1.3], ['Node02', 1.6]], 'Node13': [['Node14', 0.7], ['Node24', 0.5], ['Node23', 10000], ['Node22', 0.5], ['Node12', 0.7], ['Node02', 1.6], ['Node03', 1.3], ['Node04', 1.6]], 'Node12': [['Node13', 0.6], ['Node23', 0.5], ['Node22', 0.6], ['Node21', 0.9], ['Node11', 0.6], ['Node01', 0.5], ['Node02', 10000], ['Node03', 10000]], 'Node14': [['Node15', 0.6], ['Node25', 0.5], ['Node24', 0.6], ['Node23', 0.9], ['Node13', 0.6], ['Node03', 0.5], ['Node04', 10000], ['Node05', 10000]], 'Node24': [['Node25', 0.7], ['Node35', 0.5], ['Node34', 10000], ['Node33', 0.5], ['Node23', 0.7], ['Node13', 1.6], ['Node14', 1.3], ['Node15', 1.6]], 'Node32': [['Node33', 0.6], ['Node43', 0.5], ['Node42', 0.6], ['Node41', 0.9], ['Node31', 0.6], ['Node21', 0.5], ['Node22', 10000], ['Node23', 10000]], 'Node31': [['Node32', 0.7], ['Node42', 0.5], ['Node41', 10000], ['Node40', 0.5], ['Node30', 0.7], ['Node20', 1.6], ['Node21', 1.3], ['Node22', 1.6]], 'Node21': [['Node22', 0.6], ['Node32', 0.5], ['Node31', 0.6], ['Node30', 0.9], ['Node20', 0.6], ['Node10', 0.5], ['Node11', 10000], ['Node12', 10000]], 'Node22': [['Node23', 0.7], ['Node33', 0.5], ['Node32', 10000], ['Node31', 0.5], ['Node21', 0.7], ['Node11', 1.6], ['Node12', 1.3], ['Node13', 1.6]], 'Node23': [['Node24', 0.6], ['Node34', 0.5], ['Node33', 0.6], ['Node32', 0.9], ['Node22', 0.6], ['Node12', 0.5], ['Node13', 10000], ['Node14', 10000]], 'Node33': [['Node34', 0.7], ['Node44', 0.5], ['Node43', 10000], ['Node42', 0.5], ['Node32', 0.7], ['Node22', 1.6], ['Node23', 1.3], ['Node24', 1.6]], 'Node44': [['Node45', 0.7], ['Node55', 0.5], ['Node54', 10000], ['Node53', 0.5], ['Node43', 0.7], ['Node33', 1.6], ['Node34', 1.3], ['Node35', 1.6]], 'Node34': [['Node35', 0.6], ['Node45', 0.5], ['Node44', 0.6], ['Node43', 0.9], ['Node33', 0.6], ['Node23', 0.5], ['Node24', 10000], ['Node25', 10000]], 'Node42': [['Node43', 0.7], ['Node53', 0.5], ['Node52', 10000], ['Node51', 0.5], ['Node41', 0.7], ['Node31', 1.6], ['Node32', 1.3], ['Node33', 1.6]], 'Node43': [['Node44', 0.6], ['Node54', 0.5], ['Node53', 0.6], ['Node52', 0.9], ['Node42', 0.6], ['Node32', 0.5], ['Node33', 10000], ['Node34', 10000]], 'Node41': [['Node42', 0.6], ['Node52', 0.5], ['Node51', 0.6], ['Node50', 0.9], ['Node40', 0.6], ['Node30', 0.5], ['Node31', 10000], ['Node32', 10000]]}

もちろん、ここではエッジに到達できるノードが 5 個と 0 個あります。

于 2012-12-04T19:43:59.937 に答える