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%的差异实际上相当显著。