【发布时间】:2017-10-20 18:49:43
【问题描述】:
我尝试测试两个以从列表中设置:
首先从每个列表创建集合,然后联合到结果集 或创建一个列表并返回一组列表。
我的结果看起来无论以哪种方式使用,是这样吗?或者我的研究中有错误逻辑,或者可能是这种联合的最佳方式?
import time
def set_from_set(*args):
l = set()
return set().union(*args)
def set_from_list(*args):
l = []
for larg in args:
l += larg
return set(l)
l1 = [x for x in range(1000000)]
l2 = [x for x in range(1000000)]
l3 = [x for x in range(1000000)]
dl1, dl2 = 0, 0
for x in range(100):
start = time.time()
set_from_list(l1, l2, l3)
dl1 += time.time() - start
for x in range(100):
start = time.time()
set_from_set(l1, l2, l3)
dl2 += time.time() - start
print(dl1, dl2)
结果:
19.815733194351196 16.40732741355896
【问题讨论】:
-
您的
set_from_set实际上并没有建立您想要的联合;它只是构造了一堆中间集并将它们扔掉,然后返回您在第一行构造的空集。 -
为什么不直接
set().union(l1, l2, l3)? -
@user2357112 实际上我不知道我会有多少列表
-
@vaultah 是的,刚刚注意到 :)
-
@BearBrown 然后使用
set().union(*args)
标签: python python-3.x list set