Python - 比较两个列表以找到计数

学习者

这是来自以下链接的扩展问题

Python - 在列表列表中查找元组

我一直在使用以下解决方案

# Your input data.
tuples = [(2,3), (3,6), (1,2)]
lists = [[1,2,3,4],[2,3,4,5],[2,3],[4,5,6]]

# Convert to sets just once, rather than repeatedly
# within the nested for-loops.
subsets = {t : set(t) for t in tuples}
mainsets = [set(xs) for xs in lists]

# Same as your algorithm, but written differently.
tallies = {
    tup : sum(s.issubset(m) for m in mainsets)
    for tup, s in subsets.items()
}

print(tallies)

它适用于给定的解决方案,但是当我lists size = 541909tuples size = 3363671它需要很多时间时。它一直在运行30 minutes,我还没有得到输出。每个列表/元组中的元素将按升序排列,我准备更改这些元素的数据结构。执行此操作的最快方法是什么?

jpp

通过使用collections.defaultdict构建字典,我看到了一些性能改进

from collections import defaultdict

# Your input data.
tuples = [(i, i+1) for i in range(1000)]
lists = [[1,2,3,4],[2,3,4,5],[2,3],[4,5,6]] * 1000

def original(tuples, lists):
    subsets = {t : set(t) for t in tuples}
    mainsets = [set(xs) for xs in lists]

    return { tup : sum(s.issubset(m) for m in mainsets) for tup, s in subsets.items() }

def jp(tuples, lists):
    subsets = list(map(frozenset, tuples))
    mainsets = list(map(set, lists))
    d = defaultdict(int)
    for item in mainsets:
        for sub in subsets:
            if sub.issubset(item):
                d[sub] += 1
    return d

%timeit original(tuples, lists)  # 707 ms per loop
%timeit jp(tuples, lists)        # 431 ms per loop

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

两个列表的Python比较

来自分类Dev

Python中的两个列表比较

来自分类Dev

Python:如何比较两个列表

来自分类Dev

Python:比较两个CSV列表

来自分类Dev

python - 比较两个列表

来自分类Dev

比较python中的两个大列表

来自分类Dev

两个列表,在python中更快的比较

来自分类Dev

Python-使用字典比较两个列表

来自分类Dev

比较python中两个列表的最佳算法

来自分类Dev

比较两个自定义列表python

来自分类Dev

如何比较两个列表中的项目Python 3.3

来自分类Dev

如何在python中比较两个列表

来自分类Dev

比较Python中的两个未知列表

来自分类Dev

在Python中使用Zip函数比较两个列表

来自分类Dev

如何在python中迭代比较两个列表?

来自分类Dev

比较python中的两个大列表

来自分类Dev

比较Python中两个包含数组的列表

来自分类Dev

比较python中的两个列表并打印差异

来自分类Dev

如何在Python中比较两个以上的列表?

来自分类Dev

比较python中的两个变量列表

来自分类Dev

比较基于python的两个元组列表

来自分类Dev

比较python 2中的两个dicts列表

来自分类Dev

使用 Python 比较两个布尔列表

来自分类Dev

Python - 比较两个列表时出现循环问题

来自分类Dev

在python中找到两个列表的共现

来自分类Dev

python找到两个列表之间的区别

来自分类Dev

在python中找到两个列表的共现

来自分类Dev

比较python中两个列表中的两个单词

来自分类Dev

Python:两个列表之间的成对比较:列表a> =列表b?