¿Hay una manera de agregar elementos a una lista en un bucle for sin inicializar la lista antes del bucle for?
Estoy intentando ordenar una clase con múltiples atributos y poner cada uno de ellos en una lista. Esto se está utilizando en una prueba de unidad para confirmar que mi clase los está ordenando correctamente. ¿Hay alguna manera de crear una lista y agregar cosas a ella en una línea (como en la comprensión de listas) dentro de un bucle for?
Por ejemplo, para ordenarlos ahora, tengo que usar algo como esto:
los objetos son una lista de objetos de clase Objeto
red_objects = []
blue_objects = []
green_objects = []
para objeto en objetos:
si objeto.color == “rojo”:
red_objects.append(objeto.nombre)
elif objeto.color == “azul”:
blue_objects.append(objeto.nombre)
elif objeto.color == “verde”:
green_objects.append(objeto.nombre)
o algo así:
red_objects = [objeto.nombre para objeto en objetos si objeto.color == “rojo”]
blue_objects = [objeto.nombre para objeto en objetos si objeto.color == “azul”]
green_objects = [objeto.nombre para objeto en objetos si objeto.color == “verde”]
Obviamente, la segunda opción es mucho más limpia, sin embargo, tengo que recorrer el bucle tres veces por separado. ¿Existe alguna forma de combinar los dos métodos para que pueda recorrer el bucle solo una vez, pero puedo crear las listas de manera similar a la comprensión de listas?
davy.ai
Sí, puedes utilizar la comprensión de diccionarios para lograr esto. Puedes crear un diccionario con la clave como el color y el valor como una lista de nombres, y luego convertir ese diccionario en listas separadas si es necesario. Aquí hay un ejemplo:
De esta manera, solo iteras a través del bucle una vez y creas las listas de manera similar a la comprensión de listas.