On Wed, Sep 9, 2020 at 5:45 PM Peter Otten <__pete...@web.de> wrote:
>
> Peter Otten wrote:
>
> > If the list is huge you can also delete in reverse order:
> >
> > for i in reversed(len(_list)):
>
> Make that reversed(range(len(_list))).
>
> >     if discard(_list[i]):
> >         del _list[i]
>
> Example:
>
> >>> items = ['a', 'b', 'c', 'd', 'e']
> >>> for i, item in enumerate(items):
> ...     if item in "bcd":
> ...         del items[i]
> ...
> >>> items
> ['a', 'c', 'e']
> >>> items = ['a', 'b', 'c', 'd', 'e']
> >>> for i in reversed(range(len(items))):
> ...     if items[i] in "bcd":
> ...         del items[i]
> ...
> >>> items
> ['a', 'e']
>

But that's still pretty clunky AND inefficient (deleting from the
middle of a list is a slow operation). Filtering is far better.

items = [i for i in items if i not in "bcd"]

And if you absolutely have to mutate in place:

items[:] = [i for i in items if i not in "bcd"]

ChrisA
-- 
https://mail.python.org/mailman/listinfo/python-list

Reply via email to