Steven D'Aprano <steve+pyt...@pearwood.info> added the comment: In addition to Xiang Zhang's comments, this is neither a feature nor a bug, but a misunderstanding. This has nothing to do with strings or underscores:
py> L = [1, 2, 3, 4, 5] py> for item in L: ... L.remove(item) ... py> L [2, 4] When you modify a list as you iterate over it, the results can be unexpected. Don't do it. If you *must* modify a list that you are iterating over, you must do so backwards, so that you are only removing items from the end, not the beginning of the list: py> L = [1, 2, 3, 4, 5] py> for i in range(len(L)-1, -1, -1): ... L.remove(L[i]) ... py> L [] But don't do that: it is nearly always must faster to make a copy of the list containing only the items you wish to keep, then assign back to the list using slicing. A list comprehension makes this an easy one-liner: py> L = [1, 2, 3, 4, 5] py> L[:] = [x for x in L if x > 4] py> L [5] ---------- nosy: +steven.daprano _______________________________________ Python tracker <rep...@bugs.python.org> <https://bugs.python.org/issue33157> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com