Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 制作一个从列表中提取值的函数,并使用它与另一个包含元组的列表进行匹配_Python_Loops - Fatal编程技术网

Python 制作一个从列表中提取值的函数,并使用它与另一个包含元组的列表进行匹配

Python 制作一个从列表中提取值的函数,并使用它与另一个包含元组的列表进行匹配,python,loops,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', '

首先我有这个

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]

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

除非我误解了你,否则我认为你可以通过简单的列表理解:

>>> 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']
def get_roads(route, stops):
    return [stop[1] for stop in stops if stop[0] in route]

当且仅当“flag”是第一项时,这将打印每个元组中的第二项。如果元组中的第一个位置有多个值作为哨兵(如上面的“flag”),则可以使用中的
进行扩展,我认为在您的情况下,这是合适的邮政编码。

列表理解如何:

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

你要去吗?重复,所以问题不是有效的开发方法。当我运行时,您的代码中有一些重复的道路名称。您是否检查了
所有公共汽车站中是否也有重复的道路名称?你似乎没有花太多精力去解决你的问题。我添加了一个示例,向您展示它只在公共汽车站循环一次。