2014-02-14 93 views
4

由於代表人數的基礎b數字整數list,我怎麼轉換這個listint任何b最有效?列表爲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 

有沒有更好的方法?

+0

請參閱http://stackoverflow.com/questions/2267362/convert-integer-to-a-string-in-a-given-numeric-base-in-python – mockinterface

+0

@mockinterface:看起來像什麼是相反的OP正在試圖做... – geoffspear

+0

如何定義數字在任意基數中的表示(尤其是基數> 10)的數字? – njzk2

回答

5

你可以使用reduce

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

其中7是基礎。

+0

很有意思。我非常喜歡答案。 –

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

考慮到你不能將高於10的鹼基的數字表示爲以一位數字的「int」開始,只有達到基數36幾乎不成問題:) – geoffspear

+0

單數位整數必須做什麼與問題?他的輸入是一個任意整數係數的列表。 – Hyperboreus