Python中的for循环 - 如何在循环内修改i

TMW*_*MWP 7 python for-loop

这段代码是用Jupyter笔记本中的Python 3.6编写的.在其他语言中,我很确定我构建了如下所示的循环:

endRw=5
lenDF=100   # 1160

for i in range(0, lenDF):
    print("i: ", i)
    endIndx = i + endRw
    if endIndx > lenDF:
                endIndx = lenDF

    print("Range to use: ", i, ":", endIndx)
    # this line is a mockup for an index that is built and used
    # in the real code to do something to a pandas DF

    i = endIndx
    print("i at end of loop", i)
Run Code Online (Sandbox Code Playgroud)

但是在测试中,i不会重置endIndx,因此循环不会构建预期的索引值.

通过构建像这样的while循环,我能够解决这个问题并得到我想要的东西:

endRw=5
lenDF=97   # 1160
i = 0
while i < lenDF:
    print("i: ", i)
    endIndx = i + endRw
    if endIndx > lenDF:
                endIndx = lenDF

    print("Range to use: ", i, ":", endIndx)
    # this line is a mockup for an index that is built and used
    # in the real code to do something to a pandas DF

    i = endIndx
    print("i at end of loop: ", i)
Run Code Online (Sandbox Code Playgroud)

问题:有没有办法在python中修改循环i内部for?有没有办法在Python中while使用for循环执行循环操作?

解决了这个问题,while但只是好奇这个.

tob*_*s_k 6

可以在循环中修改循环变量for,问题是forPython中的循环不像forJava中的"旧式" 循环,而更像是"新式" for-each循环.

在Python中,for i in range(0, 10):表现不像for (int i = 0; i < 10; i++) {,但喜欢for (int i : new int[] {0, 1, ..., 10}}.

也就是说,在循环的每次迭代中,循环头不会修改循环变量(例如递增它),而是为其分配一个新值,即来自给定迭代的下一个值(range在您的情况下为a).因此,您在上一次迭代中所做的任何修改都将被覆盖.

如果要循环已知次数的迭代或循环中的每个项目,请使用for循环,但是如果要循环直到某个条件(不再)成立,就像在您的情况下一样,请使用while.


tde*_*ney 4

for循环对可迭代对象进行操作。在 中for i in range(0, lenDF)i无论在循环中如何使用,都会在每轮循环中分配范围内的下一个值。那么问题是是否有一种干净的方法来编写一个可以完成您想要的操作的迭代。在这种情况下,您所需的只是前进固定步长并调整最终步长以适应数据的结尾。

endRw=5
lenDF=97   # 1160

for i in range(0, lenDF, endRw):
    endIndx = min(i+endRw, lenDF)
    print("Range to use: ", i, ":", endIndx)
Run Code Online (Sandbox Code Playgroud)