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

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

Python:為什么 for 循環(huán)的行為很奇怪?

Python:為什么 for 循環(huán)的行為很奇怪?

汪汪一只貓 2022-06-28 17:48:21
我只是想將兩個(gè)排序列表合并到一個(gè)排序列表中。我知道這是一項(xiàng)簡單的任務(wù)和大量在線解決方案,但我的問題不同。這是我的代碼:def merge(list1, list2):    len1 = len(list1)    len2 = len(list2)    list3 = []    pointer = 0    for i in range(len1):        if (list1[i] >= list2[pointer]):            while (pointer < len2 and list1[i] >= list2[pointer]):                list3.append(list2[pointer])                pointer += 1            i -= 1        else:            list3.append(list1[i])    while (pointer < len2):        list3.append(list2[pointer])        pointer += 1    return list3if __name__ == "__main__":    print(merge([1, 2, 3, 10, 11, 22], [4, 5, 6, 7, 20, 21, 30]))我進(jìn)行了調(diào)試,我很困惑地看到,當(dāng)我將值 i 減少 1 時(shí),例如從 3 到 2,在下一次迭代中它又回到 4。我不知道為什么?您可以通過運(yùn)行代碼并查看結(jié)果來檢查它。我只需要解釋為什么會(huì)這樣。謝謝
查看完整描述

3 回答

?
幕布斯7119047

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

我很困惑地看到,當(dāng)我將值 i 減少 1 時(shí),例如從 3 到 2,在下一次迭代中它又回到 4。我不知道為什么?


因?yàn)橐馕吨耙?0 到 x-1 的值for i in range(x)執(zhí)行for主體”。i分配不同的值i不會(huì)影響其在下一次迭代中的值。


換句話說,for i in range(10)不是C 或 JavaScript 的翻譯for (i = 0; i < 10; i++)。相反,您可以將其視為for i in [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]. 如此看來,很明顯,改變一個(gè) 的值i不會(huì)影響后面的值,后者是盲目地從預(yù)先生成的列表中取出的。如果需要根據(jù)變化的條件修改迭代進(jìn)度,可以顯式編寫C/JS風(fēng)格的循環(huán):


i = 0

while i < len1:

   # ... loop body goes here ...

   i += 1

像這樣寫,i在循環(huán)體中修改會(huì)以你預(yù)期的方式影響迭代。


查看完整回答
反對(duì) 回復(fù) 2022-06-28
?
哆啦的時(shí)光機(jī)

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

您正在i在運(yùn)行的 for 循環(huán)內(nèi)進(jìn)行編輯i。我不相信它會(huì)按照你想要的方式工作。


此外,您可以簡單地合并列表并對(duì)結(jié)果進(jìn)行排序:


list1 = [1,2,3,10,11,22]

list2 = [4,5,6,7,20,21,30]

list3 = list1 + list2

list3.sort()

print(list3)

希望這可以幫助。


查看完整回答
反對(duì) 回復(fù) 2022-06-28
?
繁花如伊

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

這是因?yàn)?code>range()它是一個(gè)生成器函數(shù)。它不會(huì)像您期望的那樣創(chuàng)建數(shù)字列表,而是根據(jù)需要生成一個(gè)新數(shù)字。而且,即使它創(chuàng)建了列表,數(shù)字也會(huì)一個(gè)接一個(gè)地從列表中取出,無論您如何修改它們。在某種意義上,您可以將結(jié)果range()視為“只讀”。下面的 user4815162342 是對(duì)的,你不應(yīng)該將它與 C 風(fēng)格的循環(huán)混淆。更像是一個(gè) Fortran 循環(huán),其中迭代次數(shù)是預(yù)先計(jì)算的。

來自https://pynative.com/python-range-function/

Python 3 的范圍使用生成器。Python 3 的 range() 將在 for 循環(huán)迭代請(qǐng)求時(shí)產(chǎn)生值。即,它 range() 不會(huì)一次產(chǎn)生所有數(shù)字。

Python range() 函數(shù)返回一個(gè)不可變的整數(shù)序列對(duì)象,因此可以將 range() 輸出轉(zhuǎn)換為 Python 列表。使用列表類將范圍輸出轉(zhuǎn)換為列表。讓我們通過以下示例來理解這一點(diǎn)。


查看完整回答
反對(duì) 回復(fù) 2022-06-28
  • 3 回答
  • 0 關(guān)注
  • 287 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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