如何使用正则表达式在两个订书片列表之间检查是否有任何匹配



我有两个赞助者列表,我想检查两个列表中的订订符中的一个项目是否与其他列表匹配?

例如,我想看看在索引0中是否有索引0的sublist在索引0

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

,如果索引在LSTB中的索引1出现在索引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)

制作出现在 lstb sublists index 0的项目的 set,然后使用集合快速确定匹配的 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
[[', ', '', '']]

您应该能够通过在 lstb中构建一个dict:

来加快速度
dictb = {el[0]: el for el in lstb}
Desired_List = [el for el in lsta if el[0] in dictb]

最新更新