如何在Python中合并两个整数(例如10和20)并获得 1020 的返回值?
答案 0 :(得分:33)
将两者都转换为字符串,连接字符串,然后将结果转换回整数:
z = int(str(x) + str(y))
答案 1 :(得分:7)
使用数学可能比转换为str和back的解决方案更快:
如果你可以假设一个两位数的第二个数字:
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.为此你需要添加参数来指定每个整数中的位数,或者使用字符串。
答案 2 :(得分:6)
在python中执行此操作的最佳方法是在接受的答案中给出 - 但如果您想在jinja2模板中执行此操作 - 连接运算符~
为您提供了一种简洁的方法来执行此操作,因为它查找因此,你可以“连接整数”。
即你可以这样做(给定a=10
和b=20
):
{{ a ~ b }}
答案 3 :(得分:4)
使用旧式字符串格式:
>>> x = 10
>>> y = 20
>>> z = int('%d%d' % (x, y))
>>> print z
1020
答案 4 :(得分:4)
当然,“正确”的回答是康斯坦丁的回答。但如果您仍然想知道如何在不使用字符串强制转换的情况下执行此操作,只需使用数学:
import math
def numcat(a,b):
return int(math.pow(10,(int(math.log(b,10)) + 1)) * a + b)
>> numcat(10, 20)
>> 1020
答案 5 :(得分:4)
示例1 :( 示例2要快得多,不要说我没有警告你!)
a = 9
b = 8
def concat(a, b):
return eval(f"{a}{b}")
示例:
>>> concat(a, b)
98
示例2:
对于那些认为eval
是邪恶的人来说,这是另一种方法:
a = 6
b = 7
def concat(a, b):
return int(f"{a}{b}")
示例:
>>> concat(a, b)
67
修改强>
我认为为这些代码计时是方便的,如下所示:
>>> min(timeit.repeat("for x in range(100): int(str(a) + str(b))", "",
number=100000, globals = {'a': 10, 'b': 20}))
9.107237317533617
>>> min(timeit.repeat("for x in range(100): int(f'{a}{b}')", "",
number=100000, globals = {'a': 10, 'b': 20}))
6.4986298607643675
>>> min(timeit.repeat("for x in range(5): eval(f'{a}{b}')", "", #notice the range(5) instead of the range(100)
number=100000, globals = {'a': 10, 'b': 20}))
4.089137231865948 #x20
时代:
eval: about 1 minute and 21 seconds.
original answer: about 9 seconds.
my answer: about 6 and a half seconds.
<强>结论:强>
原始答案确实看起来更可读,但如果您需要良好的速度,请选择 int(f& #39; {翻} {varb}&#39) 强>
P.S:我的int(f&#39; {a} {b})语法仅适用于python 3.6+,因为f&#39;&#39;语法在python版本3.6 -
中未定义答案 6 :(得分:3)
粗略但有效的实施:
i1,i2 = 10,20
num = int('%i%i' % (i1,i2))
基本上,您只需将两个数字合并为一个字符串,然后将其转换回int。
答案 7 :(得分:2)
只是提供另一种解决方案:
def concat_ints(a, b):
return a*(10**len(str(b)))+b
>>> concat_ints(10, 20)
1020
答案 8 :(得分:1)
使用此功能,您可以根据需要连接任意数量的数字
def concat(*args):
string = ''
for each in args:
string += str(each)
return int(string)
例如concat(20, 10, 30)
将返回201030
一个整数
或强>
您可以使用单行程序
int(''.join(str(x) for x in (20,10,30)))
这也将返回201030
。
答案 9 :(得分:1)
要连接整数列表
int(''.join(map(str, my_list)))
答案 10 :(得分:1)
在我的测试中,使用Math转换器比转换为字符串然后返回的速度更快:
>>> key = b'rv6LuL6GPeiXOS9A9Tj5lQ=='
>>> print(repr(key), ': ', len(key))
b'rv6LuL6GPeiXOS9A9Tj5lQ==' : 24
>>> key = key.decode()
>>> print(repr(key), ': ', len(key))
'rv6LuL6GPeiXOS9A9Tj5lQ==' : 24
答案 11 :(得分:0)
一个很好的方法是使用内置的reduce()函数:
var controller = new StackController({containerId: "linkOamStackContainer"},"linkOamStackControllerDiv");
答案 12 :(得分:0)
这是另一种方法:
a = 10
b = 20
x = int('{}{}'.format(a, b))
答案 13 :(得分:-1)
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
答案 14 :(得分:-1)
很简单的答案:
for (int line=0; line<lineCount; line++) {
for (int column=0; column < strlen(str[line]); column++) {
// your code for detecting lines goes here...
}
}