Mmmhhh ... not strictly one line but ...

import re

float_str = re.compile(r"^\s*[+-]?(\d+(\.\d*)?|\.\d+)([eE][+-]?\d+)?\s*$")

val = [ ( (float_str.match(s) and [float(s)]) or [s])[0] for s in l2 ]

It's not really "readable" but well ... it works ^_^

Pierre

Christian Meesters a �crit :
Hi

Yesterday night I was thinking about the following problem:
I do have a list like l = ['1','2','3','abc','','4'] - for instance like a list one could get from a file import with the csv module (which is where my 'problem' comes from). Now I would like to generate the following list, preferably with one line of code:
l2 = [1.0,2.0,3.0,'abc','',4.0]
With other words I'd like to tell Python: Convert into a float if possible, otherwise append anyway. Is this possible in one line? (Right now my code is a lot longer.)
I was trying with 'filter' + lambda forms, list comprehensions etc., but could not find a solution. Could it be that a C-like solution with '?' and ':' is more straightforward than a solution with Python or am I just too blind to see a real pythonic solution here?


I am aware that putting a solution in one line of code might be against the 'Zen of Python' (... Complex is better than complicated ... Readability counts ...), but since I'm just asking out of curiosity, perhaps I'll get an answer anyway. ;-)

Thanks a lot in advance.
Cheers
Christian

_______________________________________________
Tutor maillist  -  [email protected]
http://mail.python.org/mailman/listinfo/tutor


-- Pierre Barbier de Reuille

INRA - UMR Cirad/Inra/Cnrs/Univ.MontpellierII AMAP
Botanique et Bio-informatique de l'Architecture des Plantes
TA40/PSII, Boulevard de la Lironde
34398 MONTPELLIER CEDEX 5, France

tel   : (33) 4 67 61 65 77    fax   : (33) 4 67 61 56 68
_______________________________________________
Tutor maillist  -  [email protected]
http://mail.python.org/mailman/listinfo/tutor

Reply via email to