python - 有效比较两个大列表列表中每个列表中的第一项?

标签 python list python-3.x

我目前正在处理一大堆列表(~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

最佳答案

假设顺序并不重要,我强烈建议使用字典将前缀(一个字符)映射到项目并set来查找匹配项:

# generation of data... not important
>>> lst1 = [list(c) for c in ["abcd", "efgh", "ijkl", "mnop"]]
>>> lst2 = [list(c) for c in ["eqrs", "atws"]]

# mapping prefix to list (assuming uniqueness)
>>> by_prefix1 = {chars[0]: chars for chars in lst1}
>>> by_prefix2 = {chars[0]: chars for chars in lst2}

# actually finding matches by intersecting sets (fast)
>>> common = set(by_prefix1.keys()) & set(by_prefix2.keys())
>>> tuples = tuple(((by_prefix1[k], by_prefix2[k]) for k in common))
>>> tuples

关于python - 有效比较两个大列表列表中每个列表中的第一项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38381755/

相关文章:

c# - 用首次出现索引替换列表中 int 的有效方法

python-3.x - 根据年份创建新的 DataFrame 列

python - 如何搜索带有 subprocess.check_output 的行?

Python:将特殊文件解压缩到内存中并将它们放入 DataFrame 中

python - 在 python 中查找(并保留)子列表的副本

用于管理和使用用户创建的共享库的 Pythonic 方式

python - python有列表构造函数吗?

java - 是否有理由更喜欢 Arrays 而不是 ArrayLists?

python - 使用标准库的 Python 中的私有(private)/公共(public)加密

python - matplotlib 运行时错误