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