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
}
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 listafirst_names
usandopop()
dentro del bucle, se cambia la longitud defirst_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
: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:
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.