我正在执行该类型的多次迭代:
masterSet=masterSet.union(setA)
随着集合的增加,执行这些操作所需的时间也越来越长(我想这是人们所期望的)。
我希望花时间检查setA的每个元素是否已经在masterSet中?
我的问题是,如果我知道masterSet尚未包含setA中的任何元素,我可以更快地这样做吗?
[更新]
鉴于这个问题仍在引起人们的关注,我想我将从下面的评论和答案中澄清一些事情:
当进行迭代时,虽然知道很多迭代,但
setA
与masterSet
有所不同,因为它的构造方式(无需处理任何检查),但是有几次迭代我需要进行唯一性检查。我想知道是否有一种方法可以“告诉”
masterSet.union()
过程,使其不打扰唯一性检查,因为我知道这与masterSet
不同,只需添加这些元素即可,他们很快相信程序员的断言是明确的。 Perhpas通过调用一些不同的“.unionWithDistinctSet()
”过程或某些东西。我认为响应表明这是不可能的(无论如何,实际上设置操作应该足够快),但是使用
masterSet.update(setA)
而不是union还是更快。我已经接受了最明确的答复,解决了我当时遇到的问题并继续生活,但是仍然想听听我假设的
.unionWithDistinctSet()
是否可能存在? 最佳答案
您可以使用set.update
来更新您的母版集。这样可以节省所有时间分配新集的时间,因此它应该比set.union
快一点……
>>> s = set(range(3))
>>> s.update(range(4))
>>> s
set([0, 1, 2, 3])
当然,如果要循环执行此操作:
masterSet = set()
for setA in iterable:
masterSet = masterSet.union(setA)
您可以通过执行以下操作来提高性能:
masterSet = set().union(*iterable)
最终,集合的成员资格测试为O(1)(在一般情况下),因此测试元素是否已包含在集合中对性能的影响并不大。