我正在執行該類型的多次迭代: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
提交
取消