modifying a list while iterating through

dustin.getz at gmail.com dustin.getz at gmail.com
Mon Feb 26 16:45:36 EST 2007


On Feb 25, 9:15 pm, attn.steven.... at gmail.com wrote:
> On Feb 25, 5:12 pm, dustin.g... at gmail.com wrote:
>
> > consider the following working loop where Packet is a subclass of
> > list, with Packet.insert(index, iterable) inserting each item in
> > iterable into Packet at consecutive indexes starting at index.
>
> >     i=0
> >     while(i<len(packet)-4):
> >         if packet[i:i+5]==Packet("01110"):
> >             packet.insert(i, "01111")
> >             i+=10 #skip the 5 bits inserted, and skip the 5 bits just
> > checked bc overlap should not trigger insertion
> >         else: i+=1
>
> > is there a way to do this more elegantly?  seems like a big kludge.
>
> If Packet consists of '0's and '1's, then it may be
> easier to convert to, or base the class on str (strings):
>
> packet = "1010101111011100111010001"
> print "BEFORE ", packet
> li = packet.split("01110")
> packet = "0111001111".join(li)
> print "AFTER  ", packet
>
> --
> Hope this helps,
> Steven



Steven, George,

Thanks for your responses.  Yea, that would work.

My original question still stands, though, in situations where a
simple string replacement might not be sufficient.  Is there a way to
insert into a list whilst iterating through it?

for example, consider a list of binary values.

for index in range(len(iterable)):
  item=iterable[index]
  if item==1:
     iterable.insert(index,0)

obv this wouldn't work because now all future indexes will be off by
the number of previously inserted items.

using a while loop to fix this ugly and counterintuitive.




More information about the Python-list mailing list