2012-10-11 30 views

Respuesta

3

La mejor manera de hacer esto en python fue dada en la respuesta aceptada, pero si desea hacer esto en plantillas jinja2, el operador de concatenación ~ le proporciona una forma clara de hacerlo, ya que busca la representación unicode de todos los objetos, por lo tanto, puede 'concatenar enteros' también.

Es decir que usted puede hacer esto (dado a=10 y b=20):

{{ a ~ b }} 
21

moldeada tanto en una cadena, concatenar las cadenas y luego emitir el resultado de nuevo a un entero:

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

Una áspera pero trabajando aplicación:

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

Básicamente, que acaba de fusionar dos números en una cadena y luego devolverlo a int.

2

usando viejo estilo de cadena de formato:

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

Usando matemáticas es probablemente más rápido que las soluciones que se convierten en str y Fondo:

Si usted puede asumir un segundo número de dos dígitos:

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

Uso:

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

Aunque, probablemente desee incluir algunos cheques para verificar que el segundo número no tenga más de dos dígitos. O, si su segundo número puede ser cualquier número de dígitos, que podría hacer algo como esto:

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

Uso:

>>> f(10,20) 
1020 
>>> f(99,193) 
99193 

Esta versión sin embargo, no permite que usted combine números como 03 y 02 para obtener 0302. Para eso necesitaría agregar argumentos para especificar el número de dígitos en cada entero, o usar cadenas.

+0

¿No crees que importar matemática ralentizaría las cosas? – none

+1

@gokcehan Sí, pero si tuviera que llamar a esta función muchas veces en un bucle, entonces el tiempo para importar matemática sería insignificante – Matt

+4

Además, tiene más sentido matemáticamente que la manipulación de cadenas. – delnan

2

sólo para dar otra solución:

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

>>> concat_ints(10, 20) 
1020 
4

supuesto, la respuesta 'correcta' sería la respuesta de Konstantin. Pero si todavía quiere saber cómo hacerlo sin necesidad de utilizar moldes de cadena, simplemente con las matemáticas:

import math 

def numcat(a,b): 
    return int(math.pow(10,(int(math.log(b,10)) + 1)) * a + b) 

>> numcat(10, 20) 
>> 1020 
+0

No funcionará concatenándose 0 como 'lastnum = 3' como' numcat (lastnum, 0) 'ValueError: error de dominio matemático – DarkXDroid

1

Con esta función se puede concatenar tantos números como desee

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

Por ejemplo concat(20, 10, 30) se volver 201030 una un entero

O

Usted puede utilizar t que un programa de línea de

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

Esto también volverá 201030.

+0

o simplemente lo hace:' concat = lambda * args: int ("". Join (map (str, args))) ', es más rápido :) – 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

Sería bueno si también escribes alguna explicación a tu código. –

0

Una manera agradable, así sería utilizar el built-in reducir la función():

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