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