2017-10-20 9 views
0

私は2つのリストから設定を取得するためにテストしてみてください。PythonのCONCATENATEのSETまたはLIST

最初に各リストから を設定したり、1つのリストと戻りリストのセットを作成生じるように設定し、組合作成します。

私の結果は、どちらの方法で使用しても問題ありません。あるいは私の研究でエラー論理がある、あるいはそのような組合にとって最良の方法が存在するかもしれませんか?

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

あなたの問題は.union()機能returns a new set

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

この機能にあり、それが中にあなたの古いセットを変更しません場所。

+0

それは私に論理ロジックのエラーを修正してくれてありがとう、しかし、時間の結果はまだほぼ等しい –

+0

あなたはどのメソッドがより高速であるかをテストしていますか? 20%の違いが実際には2つの方法を比較するとかなり重要だと私は思えます。 –

+0

あなたが正しいかもしれません –

関連する問題