元组数字到数字转换

时间:2012-07-16 10:05:53

标签: python tuples

我正在研究python而且我坚持这个问题。

输入(有一个元组):

a = (0, 1)

输出:

a = 0.1

2 个答案:

答案 0 :(得分:10)

个位数且只有两个元素

>>> a = (0, 1)
>>> a[0] + a[1] * 0.1
0.1

多位数

>>> from itertools import count
>>> a = (0, 1)
>>> sum(n * 10 ** i for i, n in zip(count(0, -1), a))
0.1
>>> a = (0, 1, 5, 3, 2)
>>> sum(n * 10 ** i for i, n in zip(count(0, -1), a))
0.15320000000000003   

使用reduce(对于Py 3.0+,您需要:from functools import reduce

>>> a = (0, 1, 5, 3, 2)
>>> reduce(lambda acc, x: acc * 0.1 + x, reversed(a))
0.1532

使用decimal模块

>>> from decimal import Decimal
>>> a = (0, 1, 5, 3, 2)
>>> Decimal((0, a, -len(a) + 1))
Decimal('0.1532')

任意两个数字

>>> a = (0, 1)
>>> float('{0}.{1}'.format(*a))
0.1

任何数字

>>> a = (0, 1, 5, 3, 2)
>>> float('{0}.{1}'.format(a[0], ''.join(str(n) for n in a[1:])))
0.1532

可能存在一些浮点不准确,您可以使用Decimal来修复这些错误,例如

>>> sum(Decimal(n) * Decimal(10) ** Decimal(i) for i, n in zip(count(0, -1), a))
Decimal('0.1532')

答案 1 :(得分:1)

假设列表a的元素是单个数字0-9,您可以使用数学:

>>> a[0] + a[1] * 0.1
0.10000000000000001

或转换为字符串,连接并转换回float:

>>> float(str(a[0])+'.'+str(a[1]))
0.10000000000000001