2012-10-11 3 views

Répondre

3

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 les templates jinja2 - l'opérateur de concaténation ~ vous donne un bon moyen de le faire car il recherche la représentation unicode de Ainsi, vous pouvez également «concaténer des entiers».

qui vous pouvez le faire (donné a=10 et b=20):

{{ a ~ b }} 
21

Cast à la fois à une chaîne, concaténer les cordes, puis jeter le résultat à un entier:

z = int(str(x) + str(y)) 
2

Une mise en œuvre rude, mais travailler:

i1,i2 = 10,20 
num = int('%i%i' % (i1,i2)) 

Fondamentalement, vous fusionner juste deux numéros dans une chaîne, puis renvoyer ce retour à int.

2

en utilisant la chaîne ancienne mise en forme:

>>> x = 10 
>>> y = 20 
>>> z = int('%d%d' % (x, y)) 
>>> print z 
1020 
6

En utilisant les mathématiques est probablement plus rapide que les solutions qui convertissent à str et arrière:

Si vous pouvez prendre un deuxième numéro à deux chiffres:

def f(x, y): 
    return x*100+y 

Utilisation:

>>> f(1,2) 
102 
>>> f(10,20) 
1020 

Bien que, vous voudriez probablement quelques vérifications incluses pour vérifier que le deuxième nombre n'est pas plus de deux chiffres. Ou, si votre deuxième numéro peut être un certain 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 des chiffres comme 03 et 02 pour obtenir 0302. Pour cela, vous devrez soit ajouter des arguments pour spécifier le nombre de chiffres dans chaque entier, soit utiliser des chaînes.

+0

ne pensez-vous pas que l'importation de maths ralentirait les choses? – none

+1

@gokcehan Oui, mais si vous deviez appeler cette fonction plusieurs fois dans une boucle, le temps d'importer des maths serait insignifiant. – Matt

+4

En outre, cela a plus de sens mathématique que la manipulation de chaînes. – delnan

2

Juste pour donner une autre solution:

def concat_ints(a, b): 
    return a*(10**len(str(b)))+b 

>>> concat_ints(10, 20) 
1020 
4

Bien sûr, la réponse 'correcte' serait la réponse de Konstantin. Mais si vous voulez toujours savoir comment le faire sans utiliser des moulages de cordes, 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 
+0

Ne fonctionne pas concaténation 0 comme 'lastlum = 3' comme' numcat (lastnum, 0) 'ValueError: erreur de domaine mathématique – DarkXDroid

1

Cette fonction vous pouvez concaténer autant de numéros que vous voulez

def concat(*args): 
    string = '' 
    for each in args: 
     string += str(each) 
    return int(string) 

Par exemple concat(20, 10, 30) sera retour 201030 un entier

OU

Vous pouvez utiliser t il un programme de ligne

int(''.join(str(x) for x in (20,10,30))) 

Ce sera également de retour 201030.

+0

ou juste faire:' concat = lambda * args: int ("". Join (map (str, args))) ', c'est plus rapide :) – slallum

0
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 
+1

Il serait bon que vous écrivez aussi quelques explications à votre code. –

0

Une belle façon aussi bien serait d'utiliser le intégré réduire() fonction:

reduce(lambda x,y:x*10+y,[10,20])