-4

我有一个代码,它使用函数根据其地理坐标计算车站 id 的最近边缘。

输出是这样的一行(格式 xml):

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

我只需要从本例中的这一行中提取 id 值:4260662#2,所以我尝试使用 for 循环,我将该行放在一个名为“ch”的字符串中,但是当我执行“for i in ch: " ,它向我显示了一个错误: TypeError: iteration over non-sequence

我尝试了很多解决方案,但都没有奏效,您能帮帮我吗?在此处输入图像描述

4

1 回答 1

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 log n) for快sorted()

于 2017-04-16T11:50:02.043 回答