2017-10-20 55 views
0

我尝试测试两个要想从列表中设置:Python的串连组或一列

在每个列表先创建组,然后工会结果集 或创建一个列表,并返回设定列表。

我的结果看起来像使用哪种方式,是这样吗?或者我在研究中有错误逻辑,或者可能存在这种联合的最佳方式?

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

+2

你的'set_from_set'实际上并没有建立你想要的联合;它只是构造了一堆中间集并抛出它们,然后返回在第一行构建的空集。 – user2357112

+3

为什么不只是'set()。union(l1,l2,l3)'? – user2357112

+0

@ user2357112在真实我不知道多少列表我将有 –

回答

2

你的问题就出在这个函数

def set_from_set(*args): 
    l= set() 
    for larg in args: 
     l.union(set(larg)) 
    return l 

.union()功能returns a new set,它不会修改您的旧集地点。

+0

谢谢它修复我的代码逻辑错误,但时间结果仍然几乎相等 –

+0

您正在测试哪种方法更快,对不对?在我看来,在比较两种方法时,20%的差异实际上非常重要。 –

+0

也许你是对的 –