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

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

將 if 條件放在列表推導(dǎo)式中的何處?

將 if 條件放在列表推導(dǎo)式中的何處?

慕田峪4524236 2021-06-08 13:54:26
我得到了以下功能:x**2 - 4*x + 6任務(wù)是找到 0 到 10 之間的最小整數(shù)值 x。我不得不使用for循環(huán):for i in range(11):    if 2*i-4==0:        print("Minimum of the given function is:", i)這給了我正確的答案2?,F(xiàn)在我應(yīng)該將其翻譯為列表理解,但我不知道將if語句放在哪里:mylist = [2*i-4==0 for i in range(11)]print(mylist)當(dāng)然,作為輸出,我得到一個true/false列表,索引 2 是正確的true. 但是如何在我的列表理解中包含 if 呢?
查看完整描述

2 回答

?
慕絲7291255

TA貢獻(xiàn)1859條經(jīng)驗(yàn) 獲得超6個贊

您正在查找單個值,而不是值列表。列表理解在這里沒有什么意義。

您的錯誤在于將您的測試放在列表理解的值表達(dá)式部分。這不是過濾器,而是您從循環(huán)中的(過濾的)元素構(gòu)建新列表值的部分。

在循環(huán)部分if 之后放一個for

[i for i in range(11) if 2 * i - 4 == 0]

這將構(gòu)建一個只有一個元素的列表,該i值的值為 true:

>>> [i for i in range(11) if 2 * i - 4 == 0]
[2]

如果您必須在一行中執(zhí)行此操作,請使用生成器表達(dá)式,然后使用該next()函數(shù)從中獲取第一個結(jié)果:

gen = (i for i in range(11) if 2 * i - 4 == 0)
result = next(gen)

i即使iif測試為真的情況下有多個可能的值,這也會為您提供最小值。

一個生成器被懶惰地評估;循環(huán)在i達(dá)到if測試為真的值時停止,并生成該值。next()只返回第一個值,因此不再進(jìn)行迭代。這就像您breakfor循環(huán)中使用一樣(除非您可以稍后繼續(xù)循環(huán))。

請注意,StopIteration如果生成器不產(chǎn)生任何值,這可能會引發(fā)異常。next()在這種情況下,您可以告訴返回默認(rèn)值;next()如果StopIteration否則會引發(fā),則返回第二個參數(shù):

result = next(gen, None)

您可以在next()調(diào)用中組合生成器表達(dá)式;如果生成器表達(dá)式是唯一的參數(shù),您可以省略(...)生成器表達(dá)式的括號,否則包括它們以便與其他參數(shù)區(qū)分開:

result = next((i for i in range(11) if 2 * i - 4 == 0), None)


查看完整回答
反對 回復(fù) 2021-06-29
  • 2 回答
  • 0 關(guān)注
  • 295 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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