我有两个赞助者列表,我想检查两个列表中的订订符中的一个项目是否与其他列表匹配?
例如,我想看看在索引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]