我正在执行该类型的多次迭代:masterSet=masterSet.union(setA)随着集合的增加,执行这些操作所需的时间也越来越长(我想这是人们所期望的)。我希望花费时间检查setA的每个元素是否已经在masterSet中?我的问题是,如果我知道masterSet还没有包含setA中的任何元素,我可以更快地做到这一点吗?[更新]鉴于这个问题仍在引起人们的关注,我想我将从下面的评论和答案中澄清一些事情:当进行迭代时,虽然我知道 许多迭代与迭代setA是不同的,但masterSet由于迭代的构造方式(无需处理任何检查),但有几次迭代需要进行唯一性检查。我想知道是否有一种方法可以“告诉”masterSet.union()程序这次不打扰唯一性检查,因为我知道这与masterSet仅添加这些元素并相信程序员的断言是完全不同的。Perhpas通过调用一些不同的.unionWithDistinctSet()程序来完成。我认为响应表明这是不可能的(无论如何,真正设置好的操作应该足够快),但还是要使用masterSet.update(setA)代替Union来稍快一些。我已经接受了最明确的答复,解决了我当时遇到的问题并继续生活,但是仍然想听听我的假设.unionWithDistinctSet()是否可能存在吗?
3 回答
一只名叫tom的猫
TA贡献1906条经验 获得超3个赞
如果您知道元素是唯一的,则集合不一定是最佳结构。
一个简单的列表可以更快地扩展。
masterList = list(masterSet)
masterList.extend(setA)
青春有我
TA贡献1784条经验 获得超8个赞
正如mgilson所指出的,您可以用来update从另一个集合中就地更新一个集合。实际上可以更快地完成工作:
def union():
i = set(range(10000))
j = set(range(5000, 15000))
return i.union(j)
def update():
i = set(range(10000))
j = set(range(5000, 15000))
i.update(j)
return i
timeit.Timer(union).timeit(10000) # 10.351907968521118
timeit.Timer(update).timeit(10000) # 8.83384895324707
添加回答
举报
0/150
提交
取消