Confused over Lists

Yigal Duppen yduppen at
Fri Aug 2 10:41:55 EDT 2002

> If I have a list of items, and wish to test each item, and remove those
> items that meet a certain criteria, I assumed I could use list.remove()
> however I came across the following problem:

Well, I don't know how iteration on lists really works, but in this specific 
case there are two much better alternatives.

1) Use 'filter'.
2) Use list comprehensions.

filter(func, list)
Filter returns a new consisting of all elements i in list for which func(i) 
is true.
In your specific example, that would be:

>>> def isNotOne(n):
...     return n != 1
>>> a_list = [1, 1, 2, 3, 1, 4]
>>> filter(isNotOne, a_list)
[2, 3, 4]

Or if you like lambda:
>>> filter(lambda n: n != 1, a_list)
[2, 3, 4]

List comprehensions can do the same, but they aren't available in older 
versions of Python. List comprehensions look as follows:
[ expression *for* variable *in* sequence *if* test ]
where *for*, *in* and *if* represent the keywords for, in and if resp.

In your case this would become:
>>> [ n
...   for n in a_list
...   if n != 1
... ]
[2, 3, 4]

Both filter and list comprehensions are usually much faster and less 
error-prone than looping and copying yourself.

.sigmentation fault

More information about the Python-list mailing list