3 回答

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ù)期的方式影響迭代。

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)
希望這可以幫助。

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)。
添加回答
舉報(bào)