3 回答

TA貢獻1794條經驗 獲得超8個贊
我很困惑地看到,當我將值 i 減少 1 時,例如從 3 到 2,在下一次迭代中它又回到 4。我不知道為什么?
因為意味著“以 0 到 x-1 的值for i in range(x)執行for主體”。i分配不同的值i不會影響其在下一次迭代中的值。
換句話說,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]. 如此看來,很明顯,改變一個 的值i不會影響后面的值,后者是盲目地從預先生成的列表中取出的。如果需要根據變化的條件修改迭代進度,可以顯式編寫C/JS風格的循環:
i = 0
while i < len1:
# ... loop body goes here ...
i += 1
像這樣寫,i在循環體中修改會以你預期的方式影響迭代。

TA貢獻1779條經驗 獲得超6個贊
您正在i在運行的 for 循環內進行編輯i。我不相信它會按照你想要的方式工作。
此外,您可以簡單地合并列表并對結果進行排序:
list1 = [1,2,3,10,11,22]
list2 = [4,5,6,7,20,21,30]
list3 = list1 + list2
list3.sort()
print(list3)
希望這可以幫助。

TA貢獻2012條經驗 獲得超12個贊
這是因為range()
它是一個生成器函數。它不會像您期望的那樣創建數字列表,而是根據需要生成一個新數字。而且,即使它創建了列表,數字也會一個接一個地從列表中取出,無論您如何修改它們。在某種意義上,您可以將結果range()
視為“只讀”。下面的 user4815162342 是對的,你不應該將它與 C 風格的循環混淆。更像是一個 Fortran 循環,其中迭代次數是預先計算的。
來自https://pynative.com/python-range-function/:
Python 3 的范圍使用生成器。Python 3 的 range() 將在 for 循環迭代請求時產生值。即,它 range() 不會一次產生所有數字。
Python range() 函數返回一個不可變的整數序列對象,因此可以將 range() 輸出轉換為 Python 列表。使用列表類將范圍輸出轉換為列表。讓我們通過以下示例來理解這一點。
添加回答
舉報