任意进制数字列表转整数

4

如果给定一个代表数字的列表,其中整数是以基础b为基础的。如何在任何最有效地将此list转换为int

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

有更好的方法吗?


请参见以下链接:https://dev59.com/E3E95IYBdhLWcg3wi-ee - mockinterface
@mockinterface: 这看起来与OP所尝试的相反。 - Wooble
你如何定义一个任意进制数的表示方式(特别是当基数大于10时)? - njzk2
2个回答

5
您可以使用 reduce 函数:
In [3]: reduce(lambda x,y:7*x+y, numlist)
Out[3]: 3267

其中7是基数。


非常有趣。我非常喜欢这个答案。 - Grijesh Chauhan

3

您可以将基数传递给int(),但这只适用于36进制以下的情况:

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

1
考虑到你无法用单个“int”表示高于10进制的数字,因此仅限于36进制几乎不是问题 :) - Wooble
单个数字整数与问题有何关联?他的输入是任意整数系数的列表。 - Hyperboreus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接