Tengo una lista de casas:
list1 = [home1, home2, home3, home4]
Y tengo otra lista de casas específicas:
list2 = [ home6, home7, home8, home10]
Cada casa tiene una date
campo. Quiero insertar List2
en list1
dependiendo de home.date
Por ejemplo, si home7.date < home1.date
, entonces home7
se insertará en la list1
antes de home1
Intenté usar dos para loops pero parece ser muy lento y la CPU realiza muchos cálculos.
for el in list1: for elt2 in list2: if el.date > elt2.date: list1.insert((list1.index(el)),elt2)
PD : algunas fechas no están establecidas, por lo que tienen un valor None
y no quiero cambiar el índice de la home
correspondiente en la list1
Algunas ideas ?
Lo primero es lo primero: modificar una lista (o dict, set, etc.) mientras se realiza una iteración es una idea muy mala.
En su caso, la solución más sencilla es probablemente fusionar las dos listas primero y luego ordenar la lista usando la callback key
:
list1.extend(list2) list1.sort(key=lambda x: x.date)
Editado:
list3 = (list1 + list2) list3.sort(key = lambda x: x.date)
Para devolver una nueva lista ordenada, debe usar la función incorporada ordenada ():
sorted_list = sorted(list1 + list2, key=lambda x: x.date, reverse=True)