首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何找出三个大集合交集的100个元素的列表?

如何找出三个大集合交集的100个元素的列表?
EN

Stack Overflow用户
提问于 2019-05-26 11:57:34
回答 1查看 51关注 0票数 0

有没有办法避免计算所有三个集合的相交,然后切分前100个数字?

到目前为止我的代码是:

代码语言:javascript
复制
def intersection_alg():
    get_set_from_variable = [A,B,C]
    cfs_set = set()
    for logical_name in get_set_from_variable:
            tmp_set = set(get_list_from_db(logical_name))
        cfs_set = cfs_set.intersection(tmp_set) if cfs_set else cfs_set
    return list(cfs_set)[:100]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-26 12:19:12

您可以使用生成器和itertools.islice,请参见下面的示例。根据您对集合内容的了解,您可以通过更改在for循环中的迭代顺序来提高性能。

由于集合按任意顺序迭代,结果可能因运行不同而有所不同。

操场:https://ideone.com/hMBZIw

代码语言:javascript
复制
import itertools


def lazy_intersection(*sets):
    for x in min(sets, key=lambda s: len(s)):
        if all(x in s for s in sets):
            yield x


a = {2*k for k in range(1000)}
b = {3*k for k in range(1000)}
c = {5*k for k in range(1000)}

generator = lazy_intersection(a, b, c)

first_10 = list(itertools.islice(generator, 10))
print(first_10)

输出(注意升序没有得到保证):

代码语言:javascript
复制
[0, 30, 60, 90, 120, 150, 180, 210, 240, 270]

资源:

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56313279

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档