2017-04-16 53 views
-4

我有一個代碼,它使用函數根據地理座標計算站點ID的最近邊緣。TypeError:在Python中的非序列迭代

的輸出是這樣的(格式的XML)的線:

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

我需要從該線是在該實施例中提取的值僅ID:4260662#2,所以我試圖使用循環,我把行放在一個名爲「ch」的字符串中,但是當我做了「for i in ch:」時,它給我顯示了一個錯誤:TypeError:對非序列的迭代

我嘗試了很多解決方案,但他們沒有工作,你能幫助我嗎? enter image description here

+0

請將* code *的所有*相關部分粘貼爲* text *,而不是圖像。請參閱https://stackoverflow.com/help/mcve。關於你的代碼,看起來,與你的想法相反,nearestEdge不是一個字符串,但可能是一些對象.... –

回答

1

closestEdgesumolib.net.edge.Edge類的一個實例。它不是一個字符串,不能像這樣對待,例如迭代它。

幸運的是Edge類包含的方法,getID(),可用於訪問ID:

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

print(closestEdge.getID()) 

在一個相關的說明,您不需要進行排序邊的列表中找到最接近(以最小距離)。相反,你可以使用min()內建函數與key說法:

from operator import itemgetter 

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

這不僅是代碼更易讀,但min()的時間複雜度爲O(n),這是快於爲O(n日誌N ) for sorted()

+0

非常感謝你的迴應,它的工作原理。 – Myriam