我正在做一个练习,指出:
假设它
s
是一个包含以逗号分隔的十进制数字序列的字符串,例如s = '1.23,2.4,3.123'
。编写一个程序,打印中的数字总和s
。
我的解决方案是:
s = '1.23,2.4,3.123'
news = s + ","
value = ""
floatValue = 0
for i in range(len(news)):
if news[i] != ',':
value += s[i]
elif news[i] == ',':
floatValue += float(value)
value = ""
print floatValue
我只是想知道是否有更有效的方法来做到这一点?另外,我正处于Python课程的开始阶段,所以在这一点上,我仅尝试使用初学者级的解决方案来实现这一目标。
是的,重要的是:
>>> s = '1.23,2.4,3.123'
>>> sum(map(float, s.split(",")))
6.753
这用于str.split
将字符串分成数字:
>>> s.split(",")
['1.23', '2.4', '3.123']
>>> map(float, s.split(","))
[1.23, 2.4, 3.123]
并sum
把总数加起来
由于有几种方法略有不同的答案,因此我认为我将对其进行测试以查看哪种方法最有效:
2.7.6
>>> import timeit
>>> def f1(s):
return sum(map(float, s.split(",")))
>>> def f2(s):
return sum(float(x) for x in s.split(","))
>>> def f3(s):
return sum([float(x) for 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
Ashwini的奖励回合(3.4.0):
>>> from ast import literal_eval
>>> def f4(s):
return 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
这用于(缓慢地!)ast.literal_eval
用于将字符串解释为浮点数的元组:
>>> literal_eval('1.23,2.4,3.123')
(1.23, 2.4, 3.123)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句