【问题标题】:Python concatenate SET or LISTPython 连接 SET 或 LIST
【发布时间】:2017-10-20 18:49:43
【问题描述】:

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

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

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

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

【问题讨论】:

  • 您的set_from_set 实际上并没有建立您想要的联合;它只是构造了一堆中间集并将它们扔掉,然后返回您在第一行构造的空集。
  • 为什么不直接set().union(l1, l2, l3)
  • @user2357112 实际上我不知道我会有多少列表
  • @vaultah 是的,刚刚注意到 :)
  • @BearBrown 然后使用set().union(*args)

标签: python python-3.x list set


【解决方案1】:

你的问题出在这个函数上

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

.union() 函数returns a new set,它不会修改您的旧设置。

【讨论】:

  • 谢谢它修复了我的代码逻辑错误但是,时间结果仍然几乎相等
  • 您正在测试哪种方法更快,对吧?在我看来,在比较两种方法时,20% 的差异实际上非常重要。
猜你喜欢
  • 2017-10-19
  • 1970-01-01
  • 1970-01-01
  • 2015-12-29
  • 1970-01-01
  • 2011-12-08
  • 1970-01-01
  • 1970-01-01
  • 2018-12-16
相关资源
最近更新 更多