Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:为什么for循环行为怪异?_Python_Python 3.x - Fatal编程技术网

Python:为什么for循环行为怪异?

Python:为什么for循环行为怪异?,python,python-3.x,Python,Python 3.x,我只是想把两个排序列表合并成一个排序列表。我知道这是一项简单的任务,网上有很多解决方案,但我的问题不同。这是我的密码: def merge(list1, list2): len1 = len(list1) len2 = len(list2) list3 = [] pointer = 0 for i in range(len1): if (list1[i] >= list2[pointer]): while

我只是想把两个排序列表合并成一个排序列表。我知道这是一项简单的任务,网上有很多解决方案,但我的问题不同。这是我的密码:

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 list3


if __name__ == "__main__":
    print(merge([1, 2, 3, 10, 11, 22], [4, 5, 6, 7, 20, 21, 30]))
我进行了调试,但我很困惑地发现,当我将值I减少1时,例如从3减少到2,在下一次迭代中,它会返回到4。我不知道为什么?您可以通过运行代码并查看结果来检查它。我只需要解释一下为什么会这样。谢谢

我很困惑地看到,当我将值I减少1时,例如从3减少到2,在下一次迭代中,它会回到4。我不知道为什么

因为rangex中的for i意味着执行for体,其中i假设值为0到x-1。为i指定不同的值不会影响其在下一次迭代中的值

换句话说,对于i=0,range10中的i不是C或JavaScript的翻译;i<10;i++。相反,你可以把它想象成[0,1,2,3,4,5,6,7,8,9]中的i。这样看来,很明显,更改i的一个值不会影响后续值,后续值会盲目地从预先生成的列表中删除。如果需要根据不断变化的条件修改迭代进度,可以显式编写C/JS风格的循环:

i = 0
while i < len1:
   # ... loop body goes here ...
   i += 1
这样写的话,修改循环体中的i将以您期望的方式影响迭代

我很困惑地看到,当我将值I减少1时,例如从3减少到2,在下一次迭代中,它会回到4。我不知道为什么

因为rangex中的for i意味着执行for体,其中i假设值为0到x-1。为i指定不同的值不会影响其在下一次迭代中的值

换句话说,对于i=0,range10中的i不是C或JavaScript的翻译;i<10;i++。相反,你可以把它想象成[0,1,2,3,4,5,6,7,8,9]中的i。这样看来,很明显,更改i的一个值不会影响后续值,后续值会盲目地从预先生成的列表中删除。如果需要根据不断变化的条件修改迭代进度,可以显式编写C/JS风格的循环:

i = 0
while i < len1:
   # ... loop body goes here ...
   i += 1
这样写,修改循环体中的i将以您期望的方式影响迭代。

这是因为范围是一个生成器函数。它不会像您预期的那样创建数字列表,而是根据您的需要生成一个新的数字。而且,即使它创建了列表,这些数字也会一个接一个地从列表中提取出来,不管您如何修改它们。在某种意义上,您可以将range的结果视为“只读”。下面的user4815162342是正确的,您不应该将其与C样式循环混淆。更像是Fortran循环,其中迭代次数提前计算

发件人:

Python3的范围使用生成器。当for循环迭代要求时,Python3的范围将产生值。i、 例如,该范围不会一次生成所有数字

Python range函数返回一个不可变的整数序列对象,因此可以将范围输出转换为Python列表。使用列表类将范围输出转换为列表。让我们用下面的例子来理解这一点

这是因为范围是一个生成器函数。它不会像您预期的那样创建数字列表,而是根据您的需要生成一个新的数字。而且,即使它创建了列表,这些数字也会一个接一个地从列表中提取出来,不管您如何修改它们。在某种意义上,您可以将range的结果视为“只读”。下面的user4815162342是正确的,您不应该将其与C样式循环混淆。更像是Fortran循环,其中迭代次数提前计算

发件人:

Python3的范围使用生成器。当for循环迭代要求时,Python3的范围将产生值。i、 例如,该范围不会一次生成所有数字

Python range函数返回一个不可变的整数序列对象,因此可以将范围输出转换为Python列表。使用列表类将范围输出转换为列表。让我们用下面的例子来理解这一点

您正在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)
希望这能有所帮助。

您正在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)

希望这能有所帮助。

一方面,当你为范围内的i添加1时,你会给i添加1;另一方面,当你为i-=1时,你会从i中减去1。这是你需要修正的逻辑,这是我的意图。我想对同一个指数进行两次检验,一方面,当你对范围内的I加1,另一方面,当你做I-=1时,从I中减去1。这是你需要修正的逻辑,这是我的意图。我想复习一下t
他两次使用同一个索引。是的,现在我知道了。谢谢你的时间是的,现在我知道了。谢谢你的时间这不是正确的推理。即使我们提前制作了一个包含索引值的显式列表,也会看到相同的结果。这不是射程的错;这是因为for循环是如何工作的。这不是正确的推理。即使我们提前制作了一个包含索引值的显式列表,也会看到相同的结果。这不是射程的错;这是因为for循环是如何工作的。