【发布时间】:2014-02-22 08:39:07
【问题描述】:
我有两个子列表列表,我想检查两个列表的子列表中的一个项目是否与另一个列表匹配?
例如,我想看看索引 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)
【问题讨论】:
-
你能发布你的for循环吗?请注意,这是一个 n^2 算法(lsta 中的每个元素都需要与 lstb 中的每个元素进行比较),尽管如果您进行大量执行,您可以使用更好的数据结构来加速它。跨度>
-
如何改进这里的数据结构?