第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

Min Max 類似函數(shù),使用 if best == None 和 Python 循環(huán)內(nèi)的條件

Min Max 類似函數(shù),使用 if best == None 和 Python 循環(huán)內(nèi)的條件

瀟湘沐 2023-10-11 16:18:23
在我們需要根據(jù)條件搜索最佳元素的函數(shù)中(例如 Min Max 函數(shù):搜索最小值或最大值),我看到一些(或許多)人檢查保存最佳答案的變量是否為 None并排循環(huán)進(jìn)行條件檢查。為了說(shuō)明這一點(diǎn),讓以下2個(gè)源代碼: A)使用循環(huán)內(nèi)的測(cè)試:is Nonelist_vals = [10,9,8,7,6,5,4,3,2,1]min_val = Nonefor val in list_vals:    if min_val is None or val<min_val:        min_val = valprint("min = ", min_val)B) 最好的接收第一個(gè)元素list_vals = [10,9,8,7,6,5,4,3,2,1]min_val = list_val[0]for val in list_vals:    if val<min_val:        min_val = valprint("min = ", min_val)我的問(wèn)題是:為什么有些人采用第一種形式(A)?這是一些好的做法嗎?如果我們使用第一個(gè) from,那就意味著在每次迭代中我們都會(huì)檢查變量是否為 None,我不知道編譯器是否對(duì)此進(jìn)行了優(yōu)化。為了查看此示例的執(zhí)行時(shí)間是否相似,我計(jì)算了方法A和B的時(shí)間:nb = 100000000 # 100_000_000list_vals = random.sample(range(nb), nb)時(shí)間(A) = 24.00 秒時(shí)間(B) = 19.31 秒我用其他長(zhǎng)度重復(fù)測(cè)試,結(jié)果是一樣的,B方法比A方法分析(相對(duì))快。感謝您的幫助。
查看完整描述

1 回答

?
慕神8447489

TA貢獻(xiàn)1780條經(jīng)驗(yàn) 獲得超1個(gè)贊

在一般代碼中,您可能想要使用任意可迭代對(duì)象,而不僅僅是list,在這種情況下,只有第一種形式完全有效(您無(wú)法索引非序列)。您可能還需要處理潛在的空輸入(A 通過(guò)生成 來(lái)處理它們None,而 B 引發(fā)一個(gè)IndexError)。它確實(shí)增加了非零成本(CPython 只有最簡(jiǎn)單、最本地化的優(yōu)化器;它不能做出像“min_val僅None在第一個(gè)循環(huán)上”這樣的廣泛推論)。如果性能至關(guān)重要,您可以通過(guò)以下方式獲得兩全其美(盡管代碼稍顯丑陋):


vals = ... could be any iterable ...


iter_vals = iter(vals)  # Explicitly convert to iterator (if already an iterator, just returns vals at trivial cost)


min_val = next(iter_vals, None)  # Pulls first value, or None if vals was empty


for val in iter_vals:  # Iterates rest of values looking for minimum

    if val < min_val:

        min_val = val


print("min = ", min_val)

在這種情況下,您不會(huì)假設(shè)輸入是序列,您不會(huì)制作不必要的數(shù)據(jù)副本(切片會(huì)這樣做list_vals[1:]),您不必為初始情況發(fā)明哨兵值,因?yàn)槟梢园踩孬@取第一個(gè)元素一次,并且您不會(huì)針對(duì)其自身測(cè)試初始值(因?yàn)橛袪顟B(tài)迭代器僅產(chǎn)生初始值一次)。


查看完整回答
反對(duì) 回復(fù) 2023-10-11
  • 1 回答
  • 0 關(guān)注
  • 107 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)