It is strange how much beauty varies for different people. I find the list comprehension much clearer than
lambda, but use whichever you find easier.
There are two things that may slow down your use of
The first is the function call overhead: as soon as you use a Python function (whether created by
lambda) it is likely that filter will be slower than the list comprehension. It almost certainly is not enough to matter, and you shouldn’t think much about performance until you’ve timed your code and found it to be a bottleneck, but the difference will be there.
The other overhead that might apply is that the lambda is being forced to access a scoped variable (
value). That is slower than accessing a local variable and in Python 2.x the list comprehension only accesses local variables. If you are using Python 3.x the list comprehension runs in a separate function so it will also be accessing
value through a closure and this difference won’t apply.
The other option to consider is to use a generator instead of a list comprehension:
def filterbyvalue(seq, value): for el in seq: if el.attribute==value: yield el
Then in your main code (which is where readability really matters) you’ve replaced both list comprehension and filter with a hopefully meaningful function name.