制作循环以形成列表?

时间:2014-03-11 12:50:51

标签: python loops

def make_services(routes_data):
    routes = []
    curr_route = []
    x = split_routes(routes_data)
    service_data1 = x[1]  # (’106’, [(’106’, ’1’, ’1’, ’43009’), ... , (’106’, ’2’, ’51’, ’43009’)])
    service_data = service_data1[1] #[(’106’, ’1’, ’1’, ’43009’), ... , (’106’, ’2’, ’51’, ’43009’)]

    first = service_data[0]  #('106', '1', '1', '43009')
    service_code = first[0]
    curr_dir = first[1]   # '1'
    l = list(curr_dir)    # ['1']


    for entry in service_data:
        direction = entry[1] #'1'
        stop = entry[3]  #'43009'

        if direction == curr_dir:   
            curr_route.append(stop) #[43009]
        else:
            routes.append(curr_route)   #[[]]
            curr_route = [stop]         #['43009']
            curr_dir = direction       #not '1'
            l.append(direction)  # ['1', __]


    routes.append(curr_route)   #[['43009']]

    #modi
    return [(tuple([service_code] + [l] + [[curr_route]]))]  

基本上我的代码只返回我

[('106', ['1', '2'], [['43009', ... '43009']])]

但我需要的是

[ ('106', ['1', '2'], [['43009', ... '43009']]),
     ('171', ['1', '2'], [['59009'...'59009]]),
      ('184', ['1'], [['45009'... '45009']]) ]

x = split_routes(routes_data)返回我

[(’171’, [(’171’, ’1’, ’1’, ’59009’), ... , (’171’, ’2’, ’73’, ’59009’)]),
(’106’, [(’106’, ’1’, ’1’, ’43009’), ... , (’106’, ’2’, ’51’, ’43009’)]),
(’184’, [(’184’, ’1’, ’1’, ’45009’), ... , (’184’, ’1’, ’52’, ’45009’)])]

我相信我的循环在顶部有问题...应该有2个循环?并给出了一个暗示,我可以使用地图。

这里的routes_data是bus_stations.txt

106,1,1,43009
.
.
.
106,2,51,43009
171,1,1,59009
.
.
.
171,2,73,59009
184,1,1,45009
.
.
.
184,1,52,45009

2 个答案:

答案 0 :(得分:0)

我认为你需要更多的东西:

def make_services(routes_data):
    output = []
    for service in split_routes(route_data):
        # service == (’171’, [(’171’, ’1’, ’1’, ’59009’), ... , (’171’, ’2’, ’73’, ’59009’)])
        code = service[0] # 171
        directions = []
        route = []
        for stop in service[1]:
            # stop == (’171’, ’1’, ’1’, ’59009’)
           if stop[1] not in directions:
               directions.append(stop[1])
           route.append(stop[3])
        output.append((code, directions, route))
    return output

output中的每个项目都是codedirections列表和route列表的三元组,例如

output == [('171', ['1', '2'], ['59009', ..., '59009']), ... ]

您可以考虑将(某些)这些值int()用于进一步处理,或者将它们保留为字符串。

答案 1 :(得分:0)

您只返回[(tuple([service_code] + [l] + [[curr_route]]))],这只是一个条目, 这就是为什么你只得到:

[('106', ['1', '2'], [['43009', ... '43009']])]

您需要将所有条目存储在一个列表中,例如results并在其中附加循环中的每个条目,如:

results.append(tuple([service_code] + [l] + [[curr_route]]))

并返回:

return results