我有两个子列表列表,我想检查两个列表中的子列表中的一个项是否与另一个列表匹配?
例如,我想看看索引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)
答案 0 :(得分:2)
制作set
个lstb
子列表中索引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]