int的任意基数列表

时间:2014-02-14 14:38:01

标签: python list int base

如果list整数表示基数b中数字的数字,如何将此list转换为int任何b最有效率的?

numlist = [1, 2, 3, 4, 5]

def list2int(numList, b):
    if b == 10: return int(''.join(map(str, numList)))
    else: ?

print list2int(numList, 7)
>>> 3267

我只能想到这种天真的做法,但这种做法非常可怕。

def list2int(numList, b):
    num = 0
    for i, ii in enumerate(numList): num += ii * b**(len(numList) - i - 1)
    return num

有没有更好的方法?

2 个答案:

答案 0 :(得分:5)

您可以使用reduce

In [3]: reduce(lambda x,y:7*x+y, numlist)
Out[3]: 3267

其中7是基础。

答案 1 :(得分:3)

您可以将基数传递给int(),但这只能用于基数36:

>>> int(''.join(map(str, numlist)), 7)
3267
>>> int(''.join(map(str, numlist)), 15)
58115
>>> int(''.join(map(str, numlist)), 36)
1776965