Minimum and Maximum of a list containing floating point numbers

Albert Hopkins marduk at letterboxes.org
Mon Sep 6 21:01:29 EDT 2010


On Mon, 2010-09-06 at 17:37 -0700, ceycey wrote:
> I have a list like ['1.1881', '1.1881', '1.1881', '1.1881', '1.1881',
> '1.1881', '1.1881', '1.1881', '1.1881', '1.1881', '1.7689',  '1.7689',
> '3.4225', '7.7284', '10.24', '9.0601', '9.0601', '9.0601', '9.0601',
> '9.0601']. What I want to do is to find minimum  and maximum number in
> this list.
> 
> I used min function,
> 
> s = ['1.1881', '1.1881', '1.1881', '1.1881', '1.1881', '1.1881',
> '1.1881', '1.1881', '1.1881', '1.1881', '1.7689',
> '1.7689', '3.4225', '7.7284', '10.24', '9.0601', '9.0601', '9.0601',
> '9.0601', '9.0601']
> 
> print min(s)
> print max(s)
> 
> these gives me
> 
> 1.181
> 9.0601
> 
> maximum value is wrong. It must be 10.24.

You are not comparing a list of floats but a list of strings. 

> I know why max function gives wrong number. Because max function
> processed elements of list as strings. How can I convert the elements
> of list to float so max function finds the correct answer.

min/max in these cases are returning strings as well.  So the fact
remains that the max function is not giving you a number at all, but a
string, and as such is correct.  String comparison is not identical to
numerical comparison.

But to answer your question:

>>> s = ['1.1881', '1.1881', '1.1881', '1.1881', '1.1881', '1.1881',
... '1.1881', '1.1881', '1.1881', '1.1881', '1.7689',
... '1.7689', '3.4225', '7.7284', '10.24', '9.0601', '9.0601', '9.0601',
... '9.0601', '9.0601']

>>> [type(x) for x in s]
[<type 'str'>, <type 'str'>, <type 'str'>, <type 'str'>, <type 'str'>,
<type 'str'>, <type 'str'>, <type 'str'>, <type 'str'>, <type 'str'>,
<type 'str'>, <type 'str'>, <type 'str'>, <type 'str'>, <type 'str'>,
<type 'str'>, <type 'str'>, <type 'str'>, <type 'str'>, <type 'str'>]


>>> type(max(s))
<type 'str'>

>>> t = [float(x) for x in s]
>>> [type(x) for x in t]
[<type 'float'>, <type 'float'>, <type 'float'>, <type 'float'>, <type
'float'>, <type 'float'>, <type 'float'>, <type 'float'>, <type
'float'>, <type 'float'>, <type 'float'>, <type 'float'>, <type
'float'>, <type 'float'>, <type 'float'>, <type 'float'>, <type
'float'>, <type 'float'>, <type 'float'>, <type 'float'>]
>>> min(t)
1.1880999999999999
>>> max(t)
10.24

>>> type(max(s))
<type 'str'>
>>> type(max(t))
<type 'float'>





More information about the Python-list mailing list