创建一个从列表中提取值的函数,并使用它来匹配其中包含元组的另一个列表

时间:2014-03-12 14:42:00

标签: python loops

首先我有这个

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]

这里的映射是错误的,所以我做一个循环吗?我该怎么做?

2 个答案:

答案 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']