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.

¿Cómo obtener el primer y último valor de un bucle en Python?

Quiero sólo el primer y último valor, es decir, 2021-01-30 15:51:47 -2.0665672163030704e-06 y 2021-01-30 15:51:51 -1.0708335011265263e-05. Además, este código proporciona la fecha de cada segundo, pero quiero el resultado para cada minuto.

from datetime import datetime, timedelta
from astropy.time import Time

start_date_time = datetime(2021, 1, 30, 15, 00, 00)
end_date_time = datetime(2021,1, 30,16,00,00)
time_diff = int((end_date_time - 
start_date_time).total_seconds())

for i in range(0, time_diff, 60): #resultado para cada minuto
    day = (start_date_time + timedelta(0, i))
    dt = Time(day)
    jd =dt.jd
    # print(day,jd)
    eph = swe.calc_ut(jd,2)[0][3]
    if eph < 0:
        print(dt,eph)

Salida -
2021-01-30 15:51:47 -2.0665672163030704e-06
2021-01-30 15:52:47 -1.1431273790932175e-05
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para obtener solo el primer y último valor de la salida, puede modificar el código de la siguiente manera:

    from datetime import datetime, timedelta
    from astropy.time import Time
    
    start_date_time = datetime(2021, 1, 30, 15, 00, 00)
    end_date_time = datetime(2021,1, 30,16,00,00)
    
    # Redondea hacia abajo los tiempos de inicio y finalización al minuto más cercano
    start_date_time = start_date_time.replace(second=0, microsecond=0)
    end_date_time = end_date_time.replace(second=0, microsecond=0)
    
    time_diff = int((end_date_time - start_date_time).total_seconds())
    
    results = []
    
    for i in range(time_diff // 60):  # itera cada minuto
        day = (start_date_time + timedelta(minutes=i))
        dt = Time(day)
        jd =dt.jd
        eph = swe.calc_ut(jd,2)[0][3]
        if eph < 0:
            results.append((dt.datetime, eph))
    
    # primer valor
    print(results[0])
    
    # último valor
    print(results[-1])
    

    Aquí, usamos la función replace para redondear hacia abajo los tiempos de inicio y finalización al minuto más cercano. Se modifica la función range para iterar cada minuto en lugar de cada segundo. Los resultados se agregan a una lista y podemos recuperar el primer y último valor de esta lista mediante la indexación.

    Tenga en cuenta que esto supone que el módulo swe que se utiliza está disponible y está instalado correctamente.

Comments are closed.