Ben Finney <ben+pyt...@benfinney.id.au> writes: > J Kenneth King <ja...@agentultra.com> writes: > >> Steven D'Aprano <ste...@remove.this.cybersource.com.au> writes: >> >> > from operator import add >> > map(add, operandlist1, operandlist2) >> >> This is the best solution so far. > > Strange to say it's a solution, when it doesn't solve the stated > problem: to replace use of ‘map()’ with a list comprehension.
Granted I admit this later in my post. It's not a solution to the OPs request, but it is the best solution to such a case. > >> I understand the OP was asking for it, but list comprehensions aren't >> the best solution in this case... it would just be line noise. > > I disagree; a list comprehension is often clearer than use of ‘map()’ > with a lambda form, and I find it to be so in this case. The use of map expresses a value and implies the procedure by which it is obtained. The list comprehension expresses the procedure by which the value is obtained. Both have uses and in some cases a list comprehension is definitely preferrable to a map operation. However in this case the procedure by which we derive the value is not important or even interesting. It is much more succinct to think of the operation as a value and express it accordingly. There's no need to clutter the mind with extra name bindings and iteration keywords. They won't make our idea any more clear. dot_product = map(mul, vec1, vec2) vs dot_product = [a * b for a, b in zip(vec1, vec2)] It's very clear, at least to me, what a dot-product is in this case. Adding in the loop construct and name bindings doesn't enhance my understanding of what a dot-product is. I don't need to see the loop construct at all in this case. A dot product is simply the multiplication of each element in a vector sequence. It's more succinct to simply think of the value rather then expressing the procedure to construct that value. This isn't a hammer issue. Not every problem is a nail. -- http://mail.python.org/mailman/listinfo/python-list