首先我有这个
first_106_route = get_route(service_106, "1") #['43009'...'03219']
all_bus_stops = [...(43009,Bt Batok Ctrl,Bt Batok Int),
(43179,Bt Batok East Ave 3,Blk 231)...,(03219,Palmer Rd,Aft Shenton Way)]
我想写一个函数,以便我得到
['Bt Batok Ctrl', 'Bt Batok East Ave 3'....,Palmer Rd]
这是我的功能
def get_roads(route, stops):
return map(lambda x: route in x, stops)
所以当我把
first_106_route = get_route(service_106, "1") #['43009'...'03219']
first_106_route_roads = get_roads(first_106_route, all_bus_stops)
print(first_106_route_roads)
# should return ['Bt Batok Ctrl', 'Bt Batok East Ave 3'....,Palmer Rd]
这里的映射是错误的,所以我做一个循环吗?我该怎么做?
答案 0 :(得分:0)
除非我误解你,否则我认为你可以用一个简单的列表理解来做到这一点:
>>> list = [('flag', 'a', 'b'), ('noflag', 'c', 'd'), ('flag', 'e', 'f')]
>>> new_list = [subitem[1] for subitem in list if 'flag' in subitem]
>>> new_list
['a', 'e']
当且仅当'标记'时,才打印每个元组中的第二个项目。是第一项。如果元组中第一个位置的多个值应该作为标记(如上面的'标记'),则可以使用in
进行扩展,我相信这将是相应的邮政编码。你的情况。
答案 1 :(得分:0)
列表理解如何:
def get_roads(route, stops):
return [stop[1] for stop in stops if stop[0] in route]
修改强>:
以下是一个例子:
def get_roads(route, stops):
return [stop[1] for stop in stops if stop[0] in route]
route = ['1', '2', '4', '7']
stops = [('0', 'ADDRESS0', 'BLAH0'), ('1', 'ADDRESS1', 'BLAH1'),
('2', 'ADDRESS2', 'BLAH2'), ('3', 'ADDRESS3', 'BLAH3'),
('4', 'ADDRESS4', 'BLAH4'), ('5', 'ADDRESS5', 'BLAH5'),
('6', 'ADDRESS6', 'BLAH6'), ('7', 'ADDRESS7', 'BLAH7')]
print(get_roads(route, stops))
输出:
['ADDRESS1', 'ADDRESS2', 'ADDRESS4', 'ADDRESS7']