Python连接集或列表

Python连接集或列表,python,python-3.x,list,set,Python,Python 3.x,List,Set,我尝试测试两个以从列表中设置: 首先从每个列表创建集合,然后合并到结果集 或者创建一个列表并返回列表集 我的结果看起来不管用哪种方式,都是这样吗?或者我在研究中有错误的逻辑,或者可能是这种结合的最佳方式 import time def set_from_set(*args): l = set() return set().union(*args) def set_from_list(*args): l = [] for larg in args:

我尝试测试两个以从列表中设置:

首先从每个列表创建集合,然后合并到结果集 或者创建一个列表并返回列表集

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

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


你的问题在于这个函数

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

使用
.union()
函数,它不会修改旧的设置。

您的问题在于此函数

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

使用
.union()
函数,它不会修改您的旧集合。

您的
set\u from\u set
实际上并没有构建您想要的联合;它只是构造一组中间集并将其丢弃,然后返回您在第一行构造的空集。为什么不干脆
set().union(l1,l2,l3)
?@user2357112在real中我不知道我将列出多少have@vaultah是的,刚刚注意到:)@BearBrown然后使用
set().union(*args)
你的
set\u-from\u-set
实际上并没有建立你想要的联盟;它只是构造一组中间集并将其丢弃,然后返回您在第一行构造的空集。为什么不干脆
set().union(l1,l2,l3)
?@user2357112在real中我不知道我将列出多少have@vaultah是的,刚刚注意到:)@BearBrown然后使用
set().union(*args)
谢谢,它修复了我的代码逻辑错误,但时间结果仍然几乎相等。您正在测试哪种方法更快,对吗?在我看来,在比较两种方法时,20%的差异实际上非常显著。谢谢,它修复了我的代码逻辑错误,但是,时间结果仍然几乎相等。您正在测试哪种方法更快,对吗?在我看来,在比较两种方法时,20%的差异实际上相当显著。