Remove items from a list
Dan Perl
dperl at rogers.com
Wed Sep 8 11:17:16 EDT 2004
But Stan says he tried something like that (see the comment in his code) and
it was still not working. I would still need a more complete code example
to reproduce the problem and figure out what went wrong.
Dan
"Mel Wilson" <mwilson at the-wire.com> wrote in message
news:9YvPBls/KvrF089yn at the-wire.com...
> In article <mailman.3029.1094638477.5135.python-list at python.org>,
> Egbert Bouwman <egbert.list at hccnet.nl> wrote:
> >On Wed, Sep 08, 2004 at 03:59:26AM +0000, Stan Cook wrote:
> >> I was trying to take a list of files in a directory and remove all but
the ".dbf" files. I used the following to try to remove the items, but they
would not remove. Any help would be greatly appreciated.
> >>
> >> x = 0
> >> for each in _dbases:
> >> if each[-4:] <> ".dbf":
> >> del each # also tried: del _dbases[x]
> >> x = x + 1
> >>
> >> I must be doing something wrong, but it acts as though it is....
> >>
> >The answers you received don't tell you what you are doing wrong.
> >If you replace 'del each' with 'print each' it works,
> >so it seems that you can not delete elements of a list you are
> >looping over. But I would like to know more about it as well.
>
> One use of `del` is to remove a name from a namespace,
> and that's what it's doing here: removing the name 'each'.
>
> A paraphrase of what's going on is:
>
> for i in xrange (len (_dbases)):
> each = _dbases[i]
> if each[-4:] <> ".dbf":
> del each
>
> and we happily throw away the name 'each' without touching
> the item in the list.
>
> The way to remove items from a list is (untested code):
>
> for i in xrange (len (a_list)-1, -1, -1):
> if i_want_to_remove (a_list[i]):
> del a_list[i]
>
> Going through the list backwards means that deleting an item
> doesn't change the index numbers of items we've yet to
> process. `del a_list[i]` removes from the list the
> reference to the object that was the i'th item in the list
> (under the hood, a Python list is implemented as an array of
> references.)
>
> This is one reason list comprehensions became popular so
> fast.
>
> Regards. Mel.
More information about the Python-list
mailing list