[issue33157] Strings beginning with underscore not removed from lists - feature or bug?

2018-03-27 Thread Steven D'Aprano

Steven D'Aprano  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 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue33157] Strings beginning with underscore not removed from lists - feature or bug?

2018-03-27 Thread Xiang Zhang

Xiang Zhang  added the comment:

You may refer to stackoverflow for an explanation, for example, 
https://stackoverflow.com/questions/6260089/strange-result-when-removing-item-from-a-list

--

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue33157] Strings beginning with underscore not removed from lists - feature or bug?

2018-03-27 Thread Xiang Zhang

Xiang Zhang  added the comment:

It's just the right behavior. You are modifying the list while iterating over 
it. It has no business of underscore.

>>> test = ['_a', 'a', '_b', 'b']
>>> for i in test: test.remove(i)
>>> test
['a', 'b']

--
nosy: +xiang.zhang
resolution:  -> not a bug
stage:  -> resolved
status: open -> closed

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue33157] Strings beginning with underscore not removed from lists - feature or bug?

2018-03-27 Thread yemiteliyadu

New submission from yemiteliyadu :

Strings beginning with underscore not removed from lists
Reproducible as shown below:

Python 3.6.4 |Anaconda custom (64-bit)| (default, Jan 16 2018, 12:04:33) 
[GCC 4.2.1 Compatible Clang 4.0.1 (tags/RELEASE_401/final)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> test = ["a","_a","b","_b"]
>>> for i in test: print(i)
... 
a
_a
b
_b
>>> for i in test: test.remove(i)
... 
>>> test
['_a', '_b']
>>> 

Is this a feature or a bug?
A search through the docs did not show any mention of this.

--
messages: 314530
nosy: yemiteliyadu
priority: normal
severity: normal
status: open
title: Strings beginning with underscore not removed from lists - feature or 
bug?
type: behavior
versions: Python 3.6

___
Python tracker 

___
___
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com