[Tutor] question about list

Liam Clarke cyresse at gmail.com
Fri Nov 12 09:21:42 CET 2004


This is fantastic - 

a = [1,2,3,4,5,6]
idx = [1,2,4]
idx.sort()
idx.reverse()
for i in idx:
   del a[i]

It's so simple once you know the answer. Like a cryptic crossword, you
slap your forehead and say 'of course.'

Cheers Bill.

Liam Clarke

On Thu, 11 Nov 2004 22:01:43 -0500, Bill Mill <bill.mill at gmail.com> wrote:
> Liam,
> 
> Sure. Sorry I was kinda short, I was in a rush earlier. Now, I got time.
> 
> In [1]: a = [1,2,3,4,5,6]
> 
> In [2]: idx = [1,2,4]
> 
> Now, what we want to do is delete the first, second and fourth
> elements (we'll let 1 be the 'zeroth' element, for convenience) of
> 'a'. I've renamed 'b' to 'idx', meaning index. When we delete the
> first element of 'a', we have a problem - what does a look like now?
> 
> In [3]: del a[idx[0]]
> 
> In [4]: a
> Out[4]: [1, 3, 4, 5, 6]
> 
> We've removed the first element, but the second and fourth elements
> have now become the first and third elements. Thus, we need to
> subtract one from every element of 'idx'. I accomplished this with a
> list comprehension:
> 
> In [5]: idx = [elt-1 for elt in idx]
> 
> In [6]: idx
> Out[6]: [0, 1, 3]
> 
> To read list comprehensions, read from the right. The first clause is
> "for elt in idx" which works exactly like a for loop. The second
> clause is "elt-1", which tells python to subtract one from the current
> element. So, overall, the list comprehension tells python "make a list
> composed of elt-1 for each elt in idx".
> Does that make sense? Try playing around with them  in the interpreter
> for a while. If you still don't understand what's going on (they're
> hard), send a new message to the list and I'll try to give a more
> detailed explanation of what's going on.
> 
> Now, to continue, when we do:
> 
> In [7]: del a[idx[1]]
> 
> In [8]: a
> Out[8]: [1, 4, 5, 6]
> 
> We delete the correct element. However, again, the third element has
> become the second element, so we have to update idx, and so on until
> we're done.
> 
> Now, looking at this with more time has given me a better idea. If we
> start removing entries from the back, instead of the front, the order
> of the elements we want to remove won't change. Thus, this code:
> 
> a = [1,2,3,4,5,6]
> idx = [1,2,4]
> idx.sort()
> idx.reverse()
> for i in idx:
>     del a[i]
> 
> Which works much more nicely, and very likely more efficiently, since
> it doesn't have to iterate through the entire idx list every time it
> deletes an element of a.
> 
> Does it make sense now? If not, feel free to drop me more questions.
> I've been doing it for a while, so I tend to miss newbie mistakes.
> 
> 
> 
> Peace
> Bill Mill
> 
> On Fri, 12 Nov 2004 15:26:14 +1300, Liam Clarke <cyresse at gmail.com> wrote:
> > Heh,
> >
> > If you don't mind, could you explain how that works?
> >
> > Especially the b=[element..] part.
> >
> > Day by day, I learn that I have so much more to learn. Sheesh.
> >
> > Thanks,
> >
> > Liam Clarke
> >
> >
> > On Thu, 11 Nov 2004 19:59:09 -0500, Bill Mill <bill.mill at gmail.com> wrote:
> > > Lin,
> > >
> > > b.sort()
> > > for i in b:
> > >     del a[i]
> > >     b = [element-1 for element in b]
> > >
> > > Peace
> > > Bill Mill
> > >
> > >
> > >
> > >
> > > On Fri, 12 Nov 2004 07:24:50 +0800, Lin Jin <jinlin555 at msn.com> wrote:
> > > > > i am new to python.i have a question about list.if i have two list:
> > > > > a=[a,b,c,d,e,f,g]
> > > > > b=[1,2,4]
> > > > > and i want to remove the element of a using b,that is i want
> > > > a=[a,d,f,g],my
> > > > > code is like this:
> > > > > >>>for i in b:
> > > > > >>>    del a[i]
> > > > >
> > > > > but it is not working, it can't remove the correct items.what should i do
> > > >
> > > > > to make it correct?thx
> > > >
> > > > _________________________________________________________________
> > > > 免费下载 MSN Explorer:   http://explorer.msn.com/lccn/
> > > >
> > > > _______________________________________________
> > > > Tutor maillist  -  Tutor at python.org
> > > > http://mail.python.org/mailman/listinfo/tutor
> > > >
> > > _______________________________________________
> > > Tutor maillist  -  Tutor at python.org
> > > http://mail.python.org/mailman/listinfo/tutor
> > >
> >
> > --
> > 'There is only one basic human right, and that is to do as you damn well please.
> > And with it comes the only basic human duty, to take the consequences.
> > _______________________________________________
> > Tutor maillist  -  Tutor at python.org
> > http://mail.python.org/mailman/listinfo/tutor
> >
> 


-- 
'There is only one basic human right, and that is to do as you damn well please.
And with it comes the only basic human duty, to take the consequences.


More information about the Tutor mailing list