Wednesday, 15 April 2015

python - print sum of strings as float -



python - print sum of strings as float -

i working on exercise states:

let s string contains sequence of decimal numbers separated commas, e.g., s = '1.23,2.4,3.123'. write programme prints sum of numbers in s.

my solution is:

s = '1.23,2.4,3.123' news = s + "," value = "" floatvalue = 0 in range(len(news)): if news[i] != ',': value += s[i] elif news[i] == ',': floatvalue += float(value) value = "" print floatvalue

i wondering if there more efficient way this? i'm in origin of python course of study @ point trying accomplish beginner-level solution.

yes, significantly:

>>> s = '1.23,2.4,3.123' >>> sum(map(float, s.split(","))) 6.753

this uses str.split split string numbers:

>>> s.split(",") ['1.23', '2.4', '3.123']

map apply float each string

>>> map(float, s.split(",")) [1.23, 2.4, 3.123]

and sum add together total.

as there several answers different approaches, thought i'd test them out see efficient:

2.7.6

>>> import timeit >>> def f1(s): homecoming sum(map(float, s.split(","))) >>> def f2(s): homecoming sum(float(x) x in s.split(",")) >>> def f3(s): homecoming sum([float(x) x in s.split(",")]) >>> timeit.timeit("f1(s)", setup="from __main__ import f1, f2, f3;s='1.23,2.4,3.123'") 2.627161979675293 >>> timeit.timeit("f2(s)", setup="from __main__ import f1, f2, f3;s='1.23,2.4,3.123'") 2.805773973464966 >>> timeit.timeit("f3(s)", setup="from __main__ import f1, f2, f3;s='1.23,2.4,3.123'") 2.6547701358795166

3.4.0

>>> timeit.timeit("f1(s)", setup="from __main__ import f1, f2, f3;s='1.23,2.4,3.123'") 2.3012791969995305 >>> timeit.timeit("f2(s)", setup="from __main__ import f1, f2, f3;s='1.23,2.4,3.123'") 3.1761953750028624 >>> timeit.timeit("f3(s)", setup="from __main__ import f1, f2, f3;s='1.23,2.4,3.123'") 3.1163038839986257

bonus round ashwini (3.4.0):

>>> ast import literal_eval >>> def f4(s): homecoming sum(literal_eval(s)) >>> timeit.timeit("f4(s)", setup="from __main__ import f1, f2, f3, f4;s='1.23,2.4,3.123'") 23.054055102998973 >>> timeit.timeit("f1(s)", setup="from __main__ import f1, f2, f3, f4;s='1.23,2.4,3.123'") 2.2302689969983476

this works (slowly!) using ast.literal_eval interpret string tuple of floats:

>>> literal_eval('1.23,2.4,3.123') (1.23, 2.4, 3.123)

python string decimal floating-point-conversion

No comments:

Post a Comment