La meilleure façon de le faire en python a été donné dans l'acceptation de réponse mais si vous voulez le faire dans jinja2 modèles - l'opérateur de concaténation ~ vous donne un moyen sympa de faire cela, car il est pour la représentation unicode de tous les objets, ainsi, vous pouvez concaténer des entiers'.
C'est que vous pouvez le faire (étant donné a=10 et b=20):
{{ a ~ b }}
il me donne en cours de validité de la syntaxe de votre code ne fonctionne pas
L'utilisation des mathématiques est probablement plus rapide que les solutions que de les convertir à la str et de retour:
Si vous pouvez supposer que un à deux chiffres de la deuxième numéro:
def f(x, y):return x*100+y
Utilisation:
>>> f(1,2)102>>> f(10,20)1020
Bien que, probablement, vous voulez quelques vérifications inclus pour vérifier la deuxième numéro n'est pas plus de deux chiffres. Ou, si votre deuxième numéro peut être n'importe quel nombre de chiffres, vous pourriez faire quelque chose comme ceci:
import math
def f(x, y):
a = math.floor(math.log10(y))return int(x*10**(1+a)+y)
Utilisation:
>>> f(10,20)1020>>> f(99,193)99193
Cette version cependant, ne vous permet pas de fusionner les nombres comme 03 et 02 pour obtenir 0302. Pour cela, vous devez soit ajouter des arguments pour spécifier le nombre de chiffres de chaque nombre entier, ou d'utiliser des chaînes.
ne pensez-vous pas que l'importation de mathématiques permettrait de ralentir les choses? Oui, mais si vous appelez cette fonction plusieurs fois dans une boucle, puis le temps d'import math serait négligeable Aussi, il est plus logique mathématiquement que la manipulation de la chaîne. Pourquoi ne pas utiliser ceil au lieu d'utiliser floor et en ajoutant une? floor(nb) + 1 pour tous num. Plus précisément, si num est un entier, alors ceil(num) == floor(num). Si vous avez remplacé floor()+1 avec ceil() la fonction serait de ne pas fonctionner correctement lorsque le second argument est un entier de puissance de 10. (Depuis log10(10^n) = n vous êtes dans un cas où floor(n) == ceil(n))
Bien sûr, la "bonne" réponse serait de Konstantin réponse. Mais si vous voulez toujours savoir comment le faire sans l'aide de la chaîne jette, juste avec les mathématiques:
import math
def numcat(a,b):return int(math.pow(10,(int(math.log(b,10))+1))* a + b)>> numcat(10,20)>>1020
Ne fonctionne pas de la concaténation de 0, commelastnum=3 comme numcat(lastnum,0) ValueError: mathématiques erreur de domaine
Exemple 1: (Exemple 2 est beaucoup plus rapide, ne pas dire que je ne vous avais pas prévenu!)
a =9
b =8def concat(a, b):return eval(f"{a}{b}")
Exemple:
>>> concat(a, b)98
Exemple 2:
Pour les personnes qui pensent eval est 'mal', voici une autre façon de faire:
a =6
b =7def concat(a, b):return int(f"{a}{b}")
Exemple:
>>> concat(a, b)67
EDIT:
J'ai pensé qu'il serait commode de temps ces codes, regarde 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
La fois:
eval: about 1 minute and21 seconds.
original answer: about 9 seconds.
my answer: about 6and a half seconds.
Conclusion:
La réponse originale à cette question regarde plus lisible, mais si vous avez besoin d'un bonne vitesse, choisissez int(f'{vara}{varb}')
P. S: Mes int(f'{a}{b}) syntaxe ne fonctionne que sur python 3.6+, que la f" la syntaxe n'est pas définie pour les versions de python 3.6-
def concatenate_int(x, y):try:
a = floor(log10(y))exceptValueError:
a =0return int(x *10**(1+ a)+ y)def concatenate(*l):
j =0for i in list(*l):
j = concatenate_int(j, i)return j
Il serait bon si vous aussi vous écrire quelques explication à votre code. Hmm. -1: votre concatenate_int fonction ressemblent étrangement @Matt 's réponse.
La meilleure façon de le faire en python a été donné dans l'acceptation de réponse mais si vous voulez le faire dans jinja2 modèles - l'opérateur de concaténation
~
vous donne un moyen sympa de faire cela, car il est pour la représentation unicode de tous les objets, ainsi, vous pouvez concaténer des entiers'.C'est que vous pouvez le faire (étant donné
a=10
etb=20
):OriginalL'auteur vonPetrushev
Fonte à la fois à une chaîne, concaténer les chaînes puis coulé le résultat d'un nombre entier:
OriginalL'auteur Konstantin Dinev
L'utilisation des mathématiques est probablement plus rapide que les solutions que de les convertir à la str et de retour:
Si vous pouvez supposer que un à deux chiffres de la deuxième numéro:
Utilisation:
Bien que, probablement, vous voulez quelques vérifications inclus pour vérifier la deuxième numéro n'est pas plus de deux chiffres. Ou, si votre deuxième numéro peut être n'importe quel nombre de chiffres, vous pourriez faire quelque chose comme ceci:
Utilisation:
Cette version cependant, ne vous permet pas de fusionner les nombres comme 03 et 02 pour obtenir 0302. Pour cela, vous devez soit ajouter des arguments pour spécifier le nombre de chiffres de chaque nombre entier, ou d'utiliser des chaînes.
Oui, mais si vous appelez cette fonction plusieurs fois dans une boucle, puis le temps d'import math serait négligeable
Aussi, il est plus logique mathématiquement que la manipulation de la chaîne.
Pourquoi ne pas utiliser
ceil
au lieu d'utiliserfloor
et en ajoutant une?floor(nb) + 1 pour tous
num
. Plus précisément, sinum
est un entier, alorsceil(num) == floor(num)
. Si vous avez remplacéfloor()+1
avecceil()
la fonction serait de ne pas fonctionner correctement lorsque le second argument est un entier de puissance de 10. (Depuislog10(10^n) = n
vous êtes dans un cas oùfloor(n) == ceil(n)
)OriginalL'auteur Matt
à l'aide de vieux style de mise en forme de chaîne:
OriginalL'auteur Corey Goldberg
Bien sûr, la "bonne" réponse serait de Konstantin réponse. Mais si vous voulez toujours savoir comment le faire sans l'aide de la chaîne jette, juste avec les mathématiques:
lastnum=3
commenumcat(lastnum,0)
ValueError: mathématiques erreur de domaineOriginalL'auteur zenpoy
Rugueuse, mais le travail de mise en œuvre:
Fondamentalement, vous venez de fusionner deux chiffres dans une chaîne, puis jeté que de retour de type int.
OriginalL'auteur irrenhaus3
Exemple 1: (Exemple 2 est beaucoup plus rapide, ne pas dire que je ne vous avais pas prévenu!)
Exemple:
Exemple 2:
Pour les personnes qui pensent
eval
est 'mal', voici une autre façon de faire:Exemple:
EDIT:
J'ai pensé qu'il serait commode de temps ces codes, regarde ci-dessous:
La fois:
Conclusion:
P. S: Mes int(f'{a}{b}) syntaxe ne fonctionne que sur python 3.6+, que la f" la syntaxe n'est pas définie pour les versions de python 3.6-
OriginalL'auteur WhyAreYouReadingThis
Juste pour donner une autre solution:
OriginalL'auteur Gareth Latty
À l'aide de cette fonction, vous pouvez enchaîner autant de numéros que vous le souhaitez
Par exemple
concat(20, 10, 30)
sera de retour201030
un entierOU
Vous pouvez utiliser un programme en ligne de
Ce sera aussi le retour
201030
.concat = lambda *args: int("".join(map(str, args)))
, il est plus rapide 🙂OriginalL'auteur arulmr
Une belle façon serait d'utiliser les réduire() fonction:
OriginalL'auteur Berend
Voici une autre façon de le faire:
OriginalL'auteur Jonathan
Hmm. -1: votre
concatenate_int
fonction ressemblent étrangement @Matt 's réponse.OriginalL'auteur user3481919