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.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With