Pythonで2つの整数を連結するにはどうすればよいですか? たとえば、 と が与えられ10
た20
場合、 の戻り値が必要"1020"
です。
14 に答える
両方を文字列にキャストし、文字列を連結してから、結果を整数にキャストします。
z = int(str(x) + str(y))
数学を使用することは、おそらく str に変換して戻すソリューションよりも高速です。
2 桁の秒数を想定できる場合:
def f(x, y):
return x*100+y
使用法:
>>> f(1,2)
102
>>> f(10,20)
1020
ただし、2 番目の数字が 2 桁を超えていないことを確認するために、いくつかのチェックを含めることをお勧めします。または、2 番目の数字が任意の桁数である場合は、次のようにすることができます。
import math
def f(x, y):
if y != 0:
a = math.floor(math.log10(y))
else:
a = -1
return int(x*10**(1+a)+y)
使用法:
>>> f(10,20)
1020
>>> f(99,193)
99193
ただし、このバージョンでは、03 や 02 などの数値をマージして 0302 を取得することはできません。そのためには、引数を追加して各整数の桁数を指定するか、文字列を使用する必要があります。
古いスタイルの文字列フォーマットを使用:
>>> x = 10
>>> y = 20
>>> z = int('%d%d' % (x, y))
>>> print z
1020
もちろん、「正しい」答えはコンスタンチンの答えです。しかし、文字列キャストを使用せずに、数学だけでそれを行う方法を知りたい場合は、次のようにします。
import math
def numcat(a,b):
return int(math.pow(10,(int(math.log(b,10)) + 1)) * a + b)
>> numcat(10, 20)
>> 1020
大雑把だが機能する実装:
i1,i2 = 10,20
num = int('%i%i' % (i1,i2))
基本的には、2 つの数値を 1 つの文字列にマージし、それを int にキャストするだけです。
Pythonでこれを行う最良の方法は、受け入れられた回答で与えられました-しかし、jinja2テンプレートでこれを行いたい場合-連結演算子~
は、すべてのオブジェクトのユニコード表現を探すため、これを行うためのきちんとした方法を提供します。したがって、 「整数を連結」することもできます。
つまり、これを行うことができます(与えられたa=10
およびb=20
):
{{ a ~ b }}
別の解決策を提供するだけです:
def concat_ints(a, b):
return a*(10**len(str(b)))+b
>>> concat_ints(10, 20)
1020
この関数を使用すると、必要な数の数値を連結できます
def concat(*args):
string = ''
for each in args:
string += str(each)
return int(string)
たとえば、整数concat(20, 10, 30)
を返します201030
また
1行のプログラムを使用できます
int(''.join(str(x) for x in (20,10,30)))
これも を返し201030
ます。
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