2017-04-16 10 views
-4

関数を使用して地理座標に基づいてステーションIDの最も近い辺を計算するコードがあります。TypeError:Pythonの非シーケンスに対する繰り返し

<edge id="4260662#2" from="1977648762" to="2600872721"/> 

私はこの例である。このラインのみからID値を抽出する必要がある:

出力が(形式のXML)のようなラインである4260662#2、私はしようとしましたforループを使用すると、 "ch"という文字列に行を挿入しますが、 "for i in ch:"を実行するとエラーが表示されます。TypeError:非シーケンスの繰り返し。

私は多くのソリューションを試しましたが、機能しませんでした。どうかお手伝いできますか? enter image description here

+0

コードの* all *関連部分を画像ではなく*テキスト*として貼り付けてください。 https://stackoverflow.com/help/mcveを参照してください。あなたのコードについては、あなたが思っているように思われるように、nearestEdgeは文字列ではなく、おそらくいくつかのオブジェクトであると思われます。 –

答えて

1

closestEdgesumolib.net.edge.Edgeクラスのインスタンスです。これは文字列ではなく、たとえば繰り返し処理することで処理することはできません。

幸いEdgeクラスはIDにアクセスするために使用することができます方法は、getID()、含まれています関連ノートで

distancesAndEdges = sorted([(dist, edge) for edge, dist in edges]) 
dist, closestEdge = distancesAndEdges[0] 

print(closestEdge.getID()) 

を、あなたは(最も近いを見つけるために、エッジのリストをソートする必要はありません。それは最小距離で)。代わりに、key引数でmin()組み込み関数を使用することができます。

from operator import itemgetter 

dist, closestEdge = min(edges, key=itemgetter(1)) 
print(closestEdge.getID()) 

だけでなく、このコードより読みやすいですが、min()はより速くはO(nログnは時間複雑O(n)のを、持っています)sorted()

+0

あなたの応答をありがとう、それは動作します。 – Myriam

関連する問題