Comment puis-je fusionner deux nombres entiers (Par exemple, 10 et 20) en Python et obtenir une valeur renvoyée de 1020 ?
La meilleure façon de faire cela en python a été donnée dans la réponse acceptée - mais si vous voulez le faire dans des modèles jinja2 - l'opérateur de concaténation ~
vous en fournit un moyen judicieux, car il recherche la représentation unicode de tous les objets. , vous pouvez aussi "concaténer des entiers".
C’est-à-dire que vous pouvez faire ceci (étant donné a=10
et b=20
):
{{ a ~ b }}
Transformez les deux en une chaîne, concaténez les chaînes, puis redonnez le résultat en un entier:
z = int(str(x) + str(y))
L'utilisation des mathématiques est probablement plus rapide que les solutions convertissant str et retour:
Si vous pouvez supposer un deuxième nombre à deux chiffres:
def f(x, y):
return x*100+y
Usage:
>>> f(1,2)
102
>>> f(10,20)
1020
Bien que, vous souhaitiez probablement que certaines vérifications soient incluses pour vérifier que le deuxième numéro ne dépasse pas deux chiffres. Ou, si votre deuxième numéro peut être un nombre quelconque de chiffres, vous pouvez faire quelque chose comme ceci:
import math
def f(x, y):
a = math.floor(math.log10(y))
return int(x*10**(1+a)+y)
Usage:
>>> f(10,20)
1020
>>> f(99,193)
99193
Cependant, cette version ne vous permet pas de fusionner des nombres tels que 03 et 02 pour obtenir 0302. Pour cela, vous devez soit ajouter des arguments pour spécifier le nombre de chiffres dans chaque entier, soit utiliser des chaînes.
en utilisant un formatage de chaîne de style ancien:
>>> x = 10
>>> y = 20
>>> z = int('%d%d' % (x, y))
>>> print z
1020
Exemple 1: (L'exemple 2 est beaucoup plus rapide, ne dites pas que je ne vous ai pas prévenu!)
a = 9
b = 8
def concat(a, b):
return eval(f"{a}{b}")
Exemple:
>>> concat(a, b)
98
Exemple 2:
Pour les personnes qui pensent que eval
est 'mauvais', voici une autre façon de le faire:
a = 6
b = 7
def concat(a, b):
return int(f"{a}{b}")
Exemple:
>>> concat(a, b)
67
MODIFIER:
Je pensais qu'il serait pratique de chronométrer ces codes, regardez ci-dessous:
>>> 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
Les temps:
eval: about 1 minute and 21 seconds.
original answer: about 9 seconds.
my answer: about 6 and a half seconds.
Conclusion:
La réponse originale semble plus lisible, mais si vous avez besoin d'une vitesse bonne, choisissez int (f '{vara} {varb}')
P.S: La syntaxe de mon int (f '{a} {b}) ne fonctionne que sur python 3.6+, car la syntaxe f' 'n'est pas définie dans les versions de python 3.6-
Bien sûr, la réponse «correcte» serait celle de Konstantin. Mais si vous voulez toujours savoir comment le faire sans utiliser de casse de chaîne, juste en math
import math
def numcat(a,b):
return int(math.pow(10,(int(math.log(b,10)) + 1)) * a + b)
>> numcat(10, 20)
>> 1020
Une implémentation difficile mais efficace:
i1,i2 = 10,20
num = int('%i%i' % (i1,i2))
Fondamentalement, vous venez de fusionner deux nombres en une chaîne, puis vous le redonnez à int.
Juste pour donner une autre solution:
def concat_ints(a, b):
return a*(10**len(str(b)))+b
>>> concat_ints(10, 20)
1020
En utilisant cette fonction, vous pouvez concaténer autant de nombres que vous le souhaitez.
def concat(*args):
string = ''
for each in args:
string += str(each)
return int(string)
Par exemple, concat(20, 10, 30)
renverra 201030
un entier
OU
Vous pouvez utiliser le programme d'une ligne
int(''.join(str(x) for x in (20,10,30)))
Cela renverra également 201030
.
Une bonne façon aussi serait d'utiliser la fonction de réduction intégrée ():
reduce(lambda x,y:x*10+y,[10,20])
Voici une autre façon de le faire:
a = 10
b = 20
x = int('{}{}'.format(a, b))