es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Operador de Slicing de Python no reconoce el número 0.

¿Alguien podría explicarme por qué esto no me está dando la salida correcta cuando el valor del arreglo 0 está en la posición inicial del operador de segmentación? El siguiente código me da la salida correcta:

array = [1, 0, 3, 1, 5, 6, 7, 8, 9, 0]

x = int(''.join(str(i) for i in array))
print("x =", x)
a = int(str(x)[:3])
print("a =", a)
b = int(str(x)[3:6])
print("b =", b)
c = int(str(x)[6:10])
print("c =", c)

Salida:

x = 1031567890
a = 103
b = 156
c = 7890

Ahora, si cambio el primer valor del arreglo a cero [0, 0, 3, 1, 5, 6, 7, 8, 9, 0], se omitirán los primeros 2 ceros pero aún se mostrará el último cero del arreglo.

Salida:

x = 31567890
a = 315
b = 678
c = 90

El mismo comportamiento ocurre si cambio el cuarto elemento a cero, que es el inicio del segundo operador de segmentación [1, 0, 3, 0, 5, 6, 7, 8, 9, 0].

Salida:

x = 1030567890
a = 103
b = 56
c = 7890

Gracias.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    La razón de este comportamiento es que cuando el arreglo comienza con un 0, la conversión de entero del arreglo a cadena eliminará el primer 0. Esto se debe a que en base 10, los ceros a la izquierda no tienen valor. Por lo tanto, la cadena resultante no tendrá el 0 inicial.

    En el código dado, el operador de rebanado [:3] recupera los primeros tres caracteres de la cadena de entero. Debido a que falta el 0 inicial, los primeros tres caracteres se toman desde el segundo elemento del arreglo en adelante. Lo mismo ocurre con el segundo operador de rebanado.

    Para manejar esto, puedes verificar si el primer elemento del arreglo es 0 y agregar un 0 inicial a la cadena resultante. Esto se puede hacer de la siguiente manera:

    array = [0, 1, 3, 1, 5, 6, 7, 8, 9, 0]
    
    x = int(''.join(str(i) for i in array))
    print("x =", x)
    
    if array[0] == 0:
        x_str = '0' + str(x)
    else:
        x_str = str(x)
    
    a = int(x_str[:3])
    print("a =", a)
    
    b = int(x_str[3:6])
    print("b =", b)
    
    c = int(x_str[6:10])
    print("c =", c)
    

    Esto dará el resultado esperado con el 0 inicial incluido:

    x = 131567890
    a = 131
    b = 567
    c = 890
    

Comments are closed.