2012-10-11 289 views

回答

3

python中要做到這一點,最好的辦法是給在接受的答案 - 但如果你想這樣做在Jinja2的模板 - 連接操作~爲您提供了這樣的一種巧妙的方法,因爲它看起來的Unicode表示所有的對象,因此,你可以'連接整數'。

這是可以做到這一點(因爲a=10b=20):

{{ a ~ b }} 
21

演員都爲一個字符串,在連接字符串,然後把結果返回到一個整數:

z = int(str(x) + str(y)) 
2

粗糙,但工作實現:

i1,i2 = 10,20 
num = int('%i%i' % (i1,i2)) 

基本上,你只是合併兩個數字成一個字符串,然後將其轉換回int。

2

使用舊式的字符串格式化:

>>> x = 10 
>>> y = 20 
>>> z = int('%d%d' % (x, y)) 
>>> print z 
1020 
6

使用數學可能快於轉換爲STR和備份解決方案:

如果您可以假設一個兩位數第二個數字:

def f(x, y): 
    return x*100+y 

用法:

>>> f(1,2) 
102 
>>> f(10,20) 
1020 

雖然,您可能希望包含一些檢查以驗證第二個數字不超過兩位數。或者,如果你的第二個號可以是任何數量的數字,你可以做這樣的事情:

import math 
def f(x, y): 
    a = math.floor(math.log10(y)) 
    return int(x*10**(1+a)+y) 

用法:

>>> f(10,20) 
1020 
>>> f(99,193) 
99193 

這個版本然而,不允許你像03合併號和02得到0302.爲此,您需要添加參數來指定每個整數中的位數,或者使用字符串。

+0

你不認爲導入數學會減慢速度嗎? – none

+1

@gokcehan是的,但如果你要在一個循環中多次調用這個函數,那麼導入數學的時間將是微不足道的 – Matt

+4

此外,它比數字串操作更具數學意義。 – delnan

2

只給另一種解決方案:

def concat_ints(a, b): 
    return a*(10**len(str(b)))+b 

>>> concat_ints(10, 20) 
1020 
4

當然的「正確」的答案應該是康斯坦丁的回答。但是,如果你還是想知道如何做到這一點,而不使用字符串類型轉換,只需用數學:

import math 

def numcat(a,b): 
    return int(math.pow(10,(int(math.log(b,10)) + 1)) * a + b) 

>> numcat(10, 20) 
>> 1020 
+0

無法將'lastnum = 3'這樣的0連接爲numcat(lastnum,0)'ValueError:數學域錯誤 – DarkXDroid

1

使用此功能,只要你想

def concat(*args): 
    string = '' 
    for each in args: 
     string += str(each) 
    return int(string) 

例如concat(20, 10, 30)將您可以連接儘可能多的數字返回201030的整數

OR

您還可以使用t他一行方案

int(''.join(str(x) for x in (20,10,30))) 

這也將返回201030

+0

或者只是做:'concat = lambda * args:int(「」。join(map(str, args)))',它會更快:) – slallum

0
def concatenate_int(x, y): 

    try: 
    a = floor(log10(y)) 
    except ValueError: 
    a = 0 
    return int(x * 10 ** (1 + a) + y) 


def concatenate(*l): 
    j = 0 
    for i in list(*l): 
    j = concatenate_int(j, i) 
    return j 
+1

如果你還會爲你的代碼寫一些解釋,那將會很好。 – 2014-06-24 20:03:19

0

一個很好的方式,以及是使用內置的減少()函數:

reduce(lambda x,y:x*10+y,[10,20])