如果我们知道元素是唯一的,则扩展集合的快速方法

我正在执行该类型的多次迭代:

masterSet=masterSet.union(setA)

随着集合的增加,执行这些操作所需的时间也越来越长(我想这是人们所期望的)。

我希望花费时间检查setA的每个元素是否已经在masterSet中?

我的问题是,如果我知道masterSet还没有包含setA中的任何元素,我可以更快地做到这一点吗?

[更新]

鉴于这个问题仍在引起人们的关注,我想我将从下面的评论和答案中澄清一些事情:

当进行迭代时,虽然我知道 许多迭代与迭代setA是不同的,但masterSet由于迭代的构造方式(无需处理任何检查),但有几次迭代需要进行唯一性检查。

我想知道是否有一种方法可以“告诉”masterSet.union()程序这次不打扰唯一性检查,因为我知道这与masterSet仅添加这些元素并相信程序员的断言是完全不同的。Perhpas通过调用一些不同的.unionWithDistinctSet()程序来完成。

我认为响应表明这是不可能的(无论如何,真正设置好的操作应该足够快),但还是要使用masterSet.update(setA)代替Union来稍快一些。

我已经接受了最明确的答复,解决了我当时遇到的问题并继续生活,但是仍然想听听我的假设.unionWithDistinctSet()是否可能存在吗?


繁花不似锦
浏览 175回答 3
3回答

一只名叫tom的猫

如果您知道元素是唯一的,则集合不一定是最佳结构。一个简单的列表可以更快地扩展。masterList = list(masterSet)masterList.extend(setA)

青春有我

正如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 itimeit.Timer(union).timeit(10000)   # 10.351907968521118timeit.Timer(update).timeit(10000)  # 8.83384895324707
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python