Minimum and Maximum of a list containing floating point numbers
Steven D'Aprano
steve-REMOVE-THIS at cybersource.com.au
Mon Sep 6 23:50:41 EDT 2010
On Tue, 07 Sep 2010 12:40:57 +1000, Ben Finney wrote:
> Steven D'Aprano <steve-REMOVE-THIS at cybersource.com.au> writes:
>
>> On Tue, 07 Sep 2010 11:00:45 +1000, Ben Finney wrote:
>>
>> > If you're going to use the list of float objects, you can convert
>> > them all with a list comprehension.
>> [...]
>> > >>> numbers_as_float = [float(x) for x in numbers_as_str]
>>
>> That's awfully verbose. A map is simpler:
>>
>> numbers_as_float = map(float, numbers_as_str)
>
> I'll pay “verbose”, but not “awfully”. There is little difference in
> verbosity between your example and mine. Further, I don't see my example
> as excessive, which I assume your “awfully” entails.
Sorry, verbose is not the word I want... I don't know what word I
*actually* want, so let me explain.
Instead of thinking about a single transformation "change a list of
strings to a list of floats", the list comp form forces you to think
about the individual list items and the mechanics of looping, and reduces
lists to a second-class data type: we can operate on ints without caring
about individual bits, but we can't operate on lists without caring about
individual list items.
Why do I need to care about individual items? The list comp even gives
them a name, "x" in your example, even though that name isn't used
anywhere else. Why do I need to specify that walking the list must be
done from left-to-right rather than whatever order the compiler thinks
best, or even in parallel?
Answer: I don't, and shouldn't need to. With map, such internal details
of how the transformation is performed is hidden. I shouldn't need to
specify *how* to convert a list of strings to a list of floats. While a
list comp is less verbose than a for-loop, which is less again than a
while-loop, they all specify how to do the transformation, which is
mental overhead I shouldn't need to care about.
Of course, list comps are so seductively easy, and functional programming
so conceptually different from what many people are used to, that such
over-specification is an awfully easy trap to fall into. I'm sure my own
code is filled with similar examples where I use a list comp where a map
is more suitable.
--
Steven
More information about the Python-list
mailing list