在Python中合并两个整数

Fi3*_*n1k 24 python concatenation

如何在Python中合并两个整数(例如,10和20)并获得1020的返回值?

Kon*_*nev 38

将两者都转换为字符串,连接字符串,然后将结果转换回整数:

z = int(str(x) + str(y))
Run Code Online (Sandbox Code Playgroud)


Mat*_*att 9

使用数学可能比转换为str和back的解决方案更快:

如果你可以假设一个两位数的第二个数字:

def f(x, y):
    return x*100+y
Run Code Online (Sandbox Code Playgroud)

用法:

>>> f(1,2)
102
>>> f(10,20)
1020
Run Code Online (Sandbox Code Playgroud)

虽然,您可能希望包含一些检查以验证第二个数字不超过两位数.或者,如果您的第二个数字可以是任意数量的数字,您可以执行以下操作:

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

用法:

>>> f(10,20)
1020
>>> f(99,193)
99193
Run Code Online (Sandbox Code Playgroud)

但是,此版本不允许您合并03和02之类的数字以获得0302.为此,您需要添加参数以指定每个整数中的位数,或使用字符串.

  • 而且,它在数学上比字符串操作更有意义. (4认同)
  • 你不认为导入数学会减慢速度吗? (2认同)
  • @gokcehan 是的,但是如果您要在循环中多次调用此函数,那么导入数学的时间将是微不足道的 (2认同)

Why*_*his 6

示例1 :(示例2快得多,不要说我没有警告过您!

a = 9
b = 8
def concat(a, b):
    return eval(f"{a}{b}")
Run Code Online (Sandbox Code Playgroud)

例:

>>> concat(a, b)
98
Run Code Online (Sandbox Code Playgroud)

范例2:

对于认为eval“邪恶”的人,这是另一种实现方法:

a = 6
b = 7
def concat(a, b):
    return int(f"{a}{b}")
Run Code Online (Sandbox Code Playgroud)

例:

>>> concat(a, b)
67
Run Code Online (Sandbox Code Playgroud)

编辑:

我认为对这些代码进行计时很方便,请看下面:

>>> 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
Run Code Online (Sandbox Code Playgroud)

时代:

eval: about 1 minute and 21 seconds.

original answer: about 9 seconds.

my answer: about 6 and a half seconds.
Run Code Online (Sandbox Code Playgroud)

结论:

原来的答案看起来更加可读,但如果你需要一个良好的速度,选择INT(F“{翻} {} varb”)

PS:我的int(f'{a} {b})语法仅适用于python 3.6+,因为在python 3.6-版本中未定义f''语法


Cor*_*erg 5

使用旧式字符串格式:

>>> x = 10
>>> y = 20
>>> z = int('%d%d' % (x, y))
>>> print z
1020
Run Code Online (Sandbox Code Playgroud)


von*_*hev 5

在python中执行此操作的最佳方法是在接受的答案中给出 - 但如果您想在jinja2模板中执行此操作 - 连接运算符~为您提供了一种简洁的方法,因为它查找所有对象的unicode表示,因此,你也可以'连接整数'.

那就是你可以这样做(给定a=10b=20):

{{ a ~ b }}
Run Code Online (Sandbox Code Playgroud)

  • 它以有效的语法为我提供了您的代码不起作用 (3认同)