在我当前正在解决的问题中,涉及公共汽车,因此有望消除代码中有关停靠点和路线的提及。
因此,从本质上讲,我想通过此功能实现的目标是使下一站停止。我已经解决了大约80%的问题,但仍坚持下一站
def nextstop(stops,routes,stopX,routeX):
matchedRoute = []
matchedstop = []
for i in routes:
if routeX in i:
matchedRoute = i
for i in matchedRoute[1]:
if i == stopX[0]:
matchedstop = next(iter(matchedRoute))
print(matchedstop)
因此,假设我正在对该元组进行操作:
('Route 5', [1118, 1114, 1115, 533, 1370, 1091, 2363, 1296, 1298, 763, 852, 851, 995, 815, 814, 848, 846, 845, 842, 841, 838, 822, 819, 818, 997, 996, 767, 622, 621, 620, 1082])
,而我所要匹配的止损例如[1115 [。我需要以某种方式返回下一站[533]。
但是我的代码返回了元组“ Route 5”的开头
这是我遇到麻烦的地方,我将如何反对获得序列中的下一个元素?
编辑:按要求澄清
在Ipython中,我将函数解析为
python nextstop(stops,routes,stops[533],'Route 5')
第一个循环获取了我在csv文件中拥有的大量元组,并通过它们对与路由名称匹配的模式进行迭代。当它匹配时,将该元组存储为matchedRoute。
然后,我尝试遍历matchRoute,以找到该路线中的停靠点,然后我需要以此为基础检索下一个停靠点。
答案 0 :(得分:1)
您可以这样做:
def nextstop(stops,routes,stopX,routeX):
matchedRoute = []
matchedstop = []
for i in routes:
if routeX in i:
matchedRoute = i
if stopX[0] in matchedRoute[1]:
if matchedRoute[1].index(stopX[0]) == len(matchedRoute[1]):
matchedstop = "This is the last stop"
else:
matchedstop = matchedRoute[1][matchedRoute[1].index(stopX[0])+1]
else:
matchedstop = "Stop not found in route"
print(matchedstop)
我无法测试此确切的代码,因为我不知道输入内容,但是我可以举一个例子说明其工作方式:
tup1 = ('Route 5', [1118, 1114, 1115, 533, 1370, 1091, 2363, 1296, 1298, 763, 852, 851, 995, 815, 814, 848, 846, 845, 842, 841, 838, 822, 819, 818, 997, 996, 767, 622, 621, 620, 1082])
route = 'Route 5'
stop = 1115
r_x, s_x = tup1
if r_x == route:
if stop in s_x:
print(s_x[s_x.index(stop)+1])
输出:
533
list.index(elem)
方法返回列表中元素首次出现的索引。因此,如果您访问下一个索引,即通过向其添加一个索引,则可以获得下一个索引。这样,您就不必在停靠点上循环。
编辑:
#Example:
>>> routes = [('Route 5', [1118, 1114, 1115, 533, 1370, 1091, 2363, 1296, 1298, 763, 852, 851, 995, 815, 814, 848, 846, 845, 842, 841, 838, 822, 819, 818, 997, 996, 767, 622, 621, 620, 1082]),('Route 4', [1118, 1114, 1115, 533, 1370, 1091, 2363, 1296, 1298, 763, 852, 851, 995, 815, 814, 848, 846, 845, 842, 841, 838, 822, 819, 818, 997, 996, 767, 622, 621, 620, 1082])]
>>> nextstop(1,routes,[1115],'Route 5')
533
编辑2: 一个简短的答案是:
def nextstop(stops,routes,stopX,routeX):
for route, stop in routes:
if route == routeX:
if stopX[0] in stop:
try:
print(stop[stop.index(stopX[0])+1])
Except IndexError:
print("This is the last stop")
else:
print("Stop not found")