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.

He definido una variable dentro de un bucle for, pero al imprimirlo fuera del bucle no se imprime correctamente.

Aquí está el código:

count_1 = 0 
count_0 = 0 
lista = ('001111011011','000110001010','011010111111')
for i in lista:
    indice = 0 
    y = i[indice]

    if y == "1":
        count_1 = count_1 + 1
    if y == "0":
        count_0 = count_0 + 1

if count_1 > count_0:
    for i in lista:
        final_despues_1 = []
        if i[0] == "1":
            final_despues_1.append(i)
            formateado = (','.join(final_despues_1))
if count_0 > count_1:
    for i in lista:
        final_despues_1 = []
        if i[0] == "0":
            final_despues_1.append(i)
            formateado = (','.join(final_despues_1))
if count_0 == count_1:
    for i in lista:
        final_despues_1 = []
        if i[0] == "1":
            final_despues_1.append(i)
            print(final_despues_1)
            formateado = (','.join(final_despues_1))


print(formateado)

Disculpas de antemano si esta pregunta está mal formulada, es la primera vez que hago una pregunta.

Este fragmento de código funciona bien, excepto por un problema. Está diseñado para identificar el primer índice de cada número de 12 dígitos en la lista, y luego determinar si hay más 1 o 0 en esta posición. Luego selecciona todos los números con el número más común en la primera posición y los agrega a una lista. Quiero imprimir esta lista al final del programa.

He definido una variable llamada “formateado” que es igual a una lista de varios números. Cuando lo imprimo dentro del bucle en el que está definido, imprime todos los números que deberían estar en la lista, así:

Cuando lo imprimo fuera del bucle como en el código anterior, solo devuelve el último número:

011010111111

Mientras que al imprimirlo dentro del bucle como esto:

if count_0 > count_1:
        for i in lista:
            final_despues_1 = []
            if i[0] == "0":
                final_despues_1.append(i)
                formateado = (','.join(final_despues_1))
                print(formateado)

devuelve la lista completa deseada:

001111011011

000110001010

011010111111

¿Alguna idea de por qué está sucediendo esto?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El problema está en la ubicación de las líneas de código que agregan los números a la lista “final_after_1” y los unen en una cadena separada por comas. Tal como está actualmente, estas líneas se encuentran dentro de cada declaración if, lo que significa que la variable “formatted” se está sobrescribiendo cada vez que se agrega un nuevo número a la lista. Por lo tanto, cuando el bucle se completa y se imprime la variable “formatted”, solo contiene el último número que se agregó.

    Para solucionar esto, debes mover las líneas que agregan los números a “final_after_1” y los unen en “formatted” fuera de las declaraciones if, pero aún dentro del bucle que itera a través de la lista. De esta manera, se agregará cada número que cumpla con la condición a la lista y la salida final contendrá todos ellos.

    Aquí tienes un ejemplo de cómo podrías actualizar el código para lograr esto:

    count_1 = 0 
    count_0 = 0 
    list = ('001111011011','000110001010','011010111111')
    final_after_1 = []
    
    for i in list:
        index = 0 
        y = i[index]
    
        if y == "1":
            count_1 = count_1 + 1
        if y == "0":
            count_0 = count_0 + 1
    
    if count_1 > count_0:
        for i in list:
            if i[0] == "1":
                final_after_1.append(i)
    
    if count_0 > count_1:
        for i in list:
            if i[0] == "0":
                final_after_1.append(i)
    
    if count_0 == count_1:
        for i in list:
            if i[0] == "1":
                final_after_1.append(i)
    
    formatted = ','.join(final_after_1)
    print(formatted)
    

    En este código actualizado, se define la lista “final_after_1” antes del bucle y fuera de cualquier declaración if. Dentro de cada declaración if, se agregan los números relevantes a esta lista. Finalmente, fuera del bucle, se define la variable “formatted” como la lista unida en una cadena separada por comas. De esta manera, contiene todos los números que cumplieron con la condición y se imprime correctamente.

Comments are closed.