我有一個代碼,它使用函數根據地理座標計算站點ID的最近邊緣。TypeError:在Python中的非序列迭代
的輸出是這樣的(格式的XML)的線:
<edge id="4260662#2" from="1977648762" to="2600872721"/>
我需要從該線是在該實施例中提取的值僅ID:4260662#2,所以我試圖使用循環,我把行放在一個名爲「ch」的字符串中,但是當我做了「for i in ch:」時,它給我顯示了一個錯誤:TypeError:對非序列的迭代。
我有一個代碼,它使用函數根據地理座標計算站點ID的最近邊緣。TypeError:在Python中的非序列迭代
的輸出是這樣的(格式的XML)的線:
<edge id="4260662#2" from="1977648762" to="2600872721"/>
我需要從該線是在該實施例中提取的值僅ID:4260662#2,所以我試圖使用循環,我把行放在一個名爲「ch」的字符串中,但是當我做了「for i in ch:」時,它給我顯示了一個錯誤:TypeError:對非序列的迭代。
closestEdge
是sumolib.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()
。
非常感謝你的迴應,它的工作原理。 – Myriam
請將* code *的所有*相關部分粘貼爲* text *,而不是圖像。請參閱https://stackoverflow.com/help/mcve。關於你的代碼,看起來,與你的想法相反,nearestEdge不是一個字符串,但可能是一些對象.... –