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 列表。使用列表类将范围输出转换为列表。让我们通过以下示例来理解这一点。
添加回答
举报