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.

para línea en primer_nombres

Si ‘saco’ un elemento de un array en Python, parece que me estoy haciendo daño a mí mismo al arruinar la longitud total del array? Ve el siguiente ejemplo:
¿También soy un idiota o este comportamiento es normal? ¿Y hay una mejor manera de lograr lo que estoy intentando hacer?

first_names = []
last_names = []
approved_names = []
blacklisted_names = []
loopcounter = 0

with open("first_names.txt") as file:
    first_names = file.readlines()
    #first_names = [line.rstrip() for line in first_names]

for line in first_names:
    line = line.strip("\r\n")
    line = line.strip("\n")
    line = line.strip(" ")
    if line == "":
        first_names.pop(loopcounter)
        #first_names.pop(first_names.index("")) # No funciona como se esperaba
        #loopcounter -= 1 # Tampoco funciona como se esperaba......
    loopcounter += 1

loopcounter = 0


def save_names():
    with open("first_names2.txt",'wt',encoding="utf-8") as file:
        file.writelines(first_names)

y los archivos resultantes:

first_names.txt 
{

Abbey
Abbie
Abbott
Abby


Abe
Abie
Abstinence
Acton
}

y el archivo de salida:

{
Abbey
Abbie
Abbott


Abe
Abie
Abstinence
Acton
}
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, cuando utilizas el método pop() para eliminar un elemento de una lista en Python, lo estás eliminando de la lista original y cambiando su longitud. En el ejemplo dado, al eliminar "" de la lista first_names usando pop() dentro del bucle, se cambia la longitud de first_names y se omitirá el siguiente elemento en el bucle. Este comportamiento es esperado.

    Para evitar este problema, puedes crear una nueva lista solo con los elementos válidos y descartar las cadenas vacías. Esto se puede lograr utilizando una comprensión de lista en lugar de un bucle for:

    first_names = [line.strip() for line in first_names if line.strip()]
    

    Este código elimina los caracteres de espacio en blanco de cada línea usando .strip(), y solo mantiene las líneas que tienen al menos un caracter que no es espacio en blanco.

    Por lo tanto, puedes simplificar tu código de esta manera:

    with open("first_names.txt") as file:
        first_names = file.readlines()
    
    first_names = [line.strip() for line in first_names if line.strip()]
    
    with open("first_names2.txt", 'w', encoding="utf-8") as file:
        file.writelines(first_names)
    

    Al utilizar una comprensión de lista, evitas cambiar la longitud de la lista original y creas una nueva lista solo con los nombres válidos.

Comments are closed.