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