Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do you create a for loop with a dynamic range?

Tags:

python

I am iterating through a list. An element could be added to this list during an iteration. So the problem is that the loop only iterates through the original length of this list.

My code:

    i = 1
    for p in srcPts[1:]:  # skip the first item.
        pt1 = srcPts[i - 1]["Point"]
        pt2 = p["Point"]

        d = MathUtils.distance(pt1, pt2)
        if (D + d) >= I:
            qx = pt1.X + ((I - D) / d) * (pt2.X - pt1.X)
            qy = pt1.Y + ((I - D) / d) * (pt2.Y - pt1.Y)
            q  = Point(float(qx), float(qy))
            # Append new point q.
            dstPts.append(q)
            # Insert 'q' at position i in points s.t. 'q' will be the next i.
            srcPts.insert(i, {"Point": q})
            D = 0.0
        else:
            D += d
        i += 1

I've tried using for i in range(1, len(srcPts)): but again the range stays the same even after more items have been added to the list.

like image 265
icanc Avatar asked Mar 31 '13 01:03

icanc


1 Answers

You need to use a while loop instead in this case:

i = 1
while i < len(srcPts):
    # ...
    i += 1

A for loop creates an iterator for your list, once. And once created that iterator does not know that you altered the list in the loop. The while variant shown here recalculates the length each time instead.

like image 140
Martijn Pieters Avatar answered Sep 28 '22 07:09

Martijn Pieters