Kon*_*nev 38
将两者都转换为字符串,连接字符串,然后将结果转换回整数:
z = int(str(x) + str(y))
Run Code Online (Sandbox Code Playgroud)
使用数学可能比转换为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.为此,您需要添加参数以指定每个整数中的位数,或使用字符串.
示例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''语法
使用旧式字符串格式:
>>> x = 10
>>> y = 20
>>> z = int('%d%d' % (x, y))
>>> print z
1020
Run Code Online (Sandbox Code Playgroud)
在python中执行此操作的最佳方法是在接受的答案中给出 - 但如果您想在jinja2模板中执行此操作 - 连接运算符~
为您提供了一种简洁的方法,因为它查找所有对象的unicode表示,因此,你也可以'连接整数'.
那就是你可以这样做(给定a=10
和b=20
):
{{ a ~ b }}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
59547 次 |
最近记录: |