2017-10-20 24 views
0

j'essaie de tester deux pour définir la liste:Python concatenate SET ou LIST

Dans la première de chaque liste, puis Créer un ensemble à l'union ou le jeu de résultats créez une liste le retour de l'ensemble de la liste.

Mon résultat ressemble à n'importe quelle façon d'utiliser, est-ce le cas? Ou j'ai une logique d'erreur dans ma recherche, ou peut-être exister le meilleur moyen pour une telle union?

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) 

Résultat:

19,815733194351196 16,40732741355896

+2

Votre 'set_from_set' ne construit pas réellement l'union que vous voulez; il construit juste un tas d'ensembles intermédiaires et les jette, puis retourne l'ensemble vide que vous avez construit sur la première ligne. – user2357112

+3

Pourquoi ne pas simplement 'set(). Union (l1, l2, l3)'? – user2357112

+0

@ user2357112 en vrai je sais combien de liste je vais avoir –

Répondre

2

Votre problème réside dans cette fonction

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

la fonction .union()returns a new set, il ne modifie pas votre ancien appareil en endroit.

+0

je vous remercie de corriger le code erreur de code mais, les résultats de temps encore presque égal –

+0

Vous testez quelle méthode est plus rapide, non? Il me semble qu'une différence de 20% est en fait assez significative en comparant deux méthodes. –

+0

peut-être avez-vous raison –