亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如果我們知道元素是唯一的,則擴展集合的快速方法

如果我們知道元素是唯一的,則擴展集合的快速方法

繁花不似錦 2021-03-25 14:14:20
我正在執行該類型的多次迭代: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)


查看完整回答
反對 回復 2021-03-30
?
青春有我

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


查看完整回答
反對 回復 2021-03-30
  • 3 回答
  • 0 關注
  • 205 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號