如何使用正则表达式检查两个子列表列表之间是否存在匹配?

时间:2014-01-30 06:57:37

标签: python regex list sublist

我有两个子列表列表,我想检查两个列表中的子列表中的一个项是否与另一个列表匹配?

例如,我想看看索引0处的任何子列表是否出现在索引0的另一个列表中

lsta = [['aaa','bbb','ccc'],['xxx','bbb','ccc'],['eee','bbb','ccc']]
lstb = [['aaa','b','2'],['xxx','ddd','efe']]

如果索引1中的任何项目出现在lstb的索引1处,那么返回lsta中所有项目的最快方法是什么? :

Desired_List = [['aaa','bbb','ccc'],['xxx','bbb','ccc']]

For-Loops对于我的大型列表来说太慢了,所以我想知道是否有更快的方法?

这基本上是我想要完成的任务,但速度更快

Desired_List = []
for x in lsta:
    for y in lstb:
        if re.search(x[0],str(y)):
            Desired_List.append(x)

还是有其他方法可以完成这项任务吗?也许列表理解?

另外,也许,但不确定是否更快:

   Desired_List = filter(lambda x: re.search(str(x[0]),str(lstb)),lsta)

2 个答案:

答案 0 :(得分:2)

制作setlstb子列表中索引0的项目lsta,然后使用该集快速确定匹配的b_set = set(sublist[0] for sublist in lstb) desiredlist = [sublist for sublist in lsta if sublist[0] in b_set] 项:

for

请注意,您的>>> lsta = [[', ', '', '']] >>> lstb = [['a', 'b', 'c']] >>> Desired_List = [] >>> for x in lsta: ... for y in lstb: ... if re.search(x[0],str(y)): ... Desired_List.append(x) ... >>> Desired_List [[', ', '', '']] 循环解决方案有误:

{{1}}

答案 1 :(得分:0)

你应该能够通过lstb建立一个字典来提高速度:

dictb = {el[0]: el for el in lstb}
Desired_List = [el for el in lsta if el[0] in dictb]