Alex Rivera | Logout

Filter array to show rows with a specific value in a specific column

Asked 2010-01-14T05:32:43.957
10

Let's say i have a multidimensional list l:

l = [['a', 1],['b', 2],['c', 3],['a', 4]]

and I want to return another list consisting only of the rows that has 'a' in their first list element:

m = [['a', 1],['a', 4]]

What's a good and efficient way of doing this?

Edit
Report

2 Answers

1

With the filter function:

m = filter(lambda x: x[0] == 'a', l)

or as a list comprehension:

m = [x for x in l where x[0] == 'a']
answered 2010-01-14T05:35:31.093
0

What's wrong with just:

m = [i for i in l if i[0] == 'a']

Or:

m = filter(lambda x: x[0] == 'a', l)

I doubt the difference between these will be significant performance-wise. Use whichever is most convenient. I don't like lambdas, but the filter can be replaced with itertools.ifilter for larger lists if that's a problem, but you can also change the list comprehension to a generator (change the [] to ()) to achieve the same general result. Other than that, they're probably identical.

answered 2010-01-14T05:36:42.143

Your Answer