Remove items from a list

Dan Perl dperl at rogers.com
Wed Sep 8 17:17:16 CEST 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