0

假设你在 Python 中有两个字符串(只有数字),比如字符串 a 和字符串 b。产生数字 c = ab(因此是整数部分和 b 小数部分)的最快方法是什么?

4

4 回答 4

4

如果更快是指速度,我的用法建议我这样做:

float("%s.%s"% ("12", "345"))

时间结果:

>>> timeit.Timer('float("%s.%s"% ("12", "245"))').timeit()
0.39421987533569336

>>> timeit.Timer('float("{0}.{1}".format("12", "245"))').timeit()
0.573634147644043
于 2012-04-24T18:56:51.693 回答
3

原始格式(可能是最快的?):float(str(a) + '.' + str(b))

此解决方案不需要解析格式字符串。

[添加为不信者的答案]

>>> timeit.Timer('float("%s.%s"% ("12", "245"))').timeit()
1.147318164738806
>>> timeit.Timer('float("{0}.{1}".format("12", "245"))').timeit()
1.5033958226534452
>>> timeit.Timer('float("12" + "." + "245")').timeit()
0.6646503955111598

部分解释可能是您始终可以编写%sint 参数。通过 % 或 via 格式化时,可能会有额外的字符串转换.format()

于 2012-04-24T18:57:50.870 回答
1

使用floatformat

>>> a, b = '12', '345'
>>> float('{0}.{1}'.format(a, b))
12.345

编辑:不能声称这是最快的(因为我没有测试其他解决方案的速度),但确实完成了工作。

于 2012-04-24T18:50:51.497 回答
0

这将引发一个ValueError如果ab不能转换为整数(例如,如果不仅仅是数字):

float('%d.%d' % (int(a), int(b)))

(在 Python 2.7 上测试)

于 2012-04-24T18:53:57.310 回答