有没有办法避免计算所有三个集合的相交,然后切分前100个数字?
到目前为止我的代码是:
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]发布于 2019-05-26 12:19:12
您可以使用生成器和itertools.islice,请参见下面的示例。根据您对集合内容的了解,您可以通过更改在for循环中的迭代顺序来提高性能。
由于集合按任意顺序迭代,结果可能因运行不同而有所不同。
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)输出(注意升序没有得到保证):
[0, 30, 60, 90, 120, 150, 180, 210, 240, 270]资源:
https://stackoverflow.com/questions/56313279
复制相似问题