【发布时间】:2016-11-17 19:35:58
【问题描述】:
我目前正在处理大量列表(~280k 列表)和一个较小的列表(~3.5k 列表)。我正在尝试有效地将较小列表中的第一个索引与大列表中的第一个索引进行比较。如果它们匹配,我想从具有匹配第一个索引的小型和大型列表中返回两个列表。
例如:
大名单1:
[[a,b,c,d],[e,f,g,h],[i,j,k,l],[m,n,o,p]]
小清单2:
[[e,q,r,s],[a,t,w,s]]
会回来
[([e,q,r,s],[e,f,g,h]),([a,t,w,s],[a,b,c,d])]
我目前的设置如下所示,其中返回一个元组列表,每个元组包含具有匹配第一个元素的两个列表。我对正在使用的任何其他数据结构都很好。我试图使用一组元组,但在试图找出比我已经拥有的更快的方法时遇到了问题。
我用来比较这两个列表的代码目前是这样的:
match = []
for list_one in small_list:
for list_two in large_list:
if str(list_one[0]).lower() in str(list_two[0]).lower():
match.append((spm_values, cucm_values))
break
return match
【问题讨论】:
-
当其中一个列表有多个以相同值开头的子列表时会发生什么?或者那是不可能的
-
在这种情况下不会发生 - 第一个元素是 MAC 地址。
-
首先,
in运算符不是检查相等性的正确方法,您应该为此目的使用==。其次,为什么要将第一项转换为str? -
好点,不知道为什么我没有使用==。 str() 会大大减慢速度吗?
-
这些列表的维度是否相同?如果是这样,您也许可以使用
numpy的扩展列表切片及其改进的执行速度来解决哪些列表问题
标签: python list python-3.x