¿Cómo se optimizan los bucles for anidados? digamos que tengo dos tablas de datos con diferentes fechas y horas. Suponga que las fechas y horas están ordenadas en orden. La primera tabla tiene una fecha y hora, la segunda tabla tiene start.datetime y end.datetime entre otras columnas.
Puedo hacer los primeros bucles para la primera tabla y el segundo bucle para ver si el elemento en el primer bucle está entre start.datetime y end.datetime; si es así, escribe una fila en el programa. Luego, pasa al siguiente elemento en el primer ciclo. Como estoy codificando en python y es iteración, no creo que se pueda aplicar la programación dinámica (solo sé memorización), pero ¿hay alguna forma de optimizar? Supongo que mi código es tiempo = O (n ^ 2) ya que necesito hacer un bucle dos veces y espacio = O (n).
También debo asegurarme de que se eliminen los duplicados si el usuario carga exactamente la misma primera tabla. El tiempo para ejecutar el código puede ser corto, pero dado que mi csv resultante contiene una gran cantidad de datos (como 2 o 3 años de datos), planeo optimizarlo en la medida de lo posible.
#open new file using writer. write first row headings. then do a comparision and #only select those when lotstarttime is later than starttime, lotstarttime earlier than lotendtime #i is start time index and j is the lot time index with open(outfile, 'a', newline ='') as h: writer = csv.writer(h) if os.stat(outfile).st_size == 0: writer.writerow(('Start TimeStamp', 'Alarm_text', 'Package', 'Recipe', 'Lot_starttime', 'UL/L', 'Network')) for i in range(0,len(Start_time)): for j in range(0,len(Lot_starttime)): if Start_time[i] > Lot_starttime[j] and Start_time[i] < Lot_endtime[j]: writer.writerow((Start_time[i], Alarm_text[i], Package[i], Recipe[j], Lot_starttime[j],Unload_Load[j],Network[j])) #removes duplicate row keeping only first occurences #sorts according to time; earliest first df = pd.read_csv(outfile) df.drop_duplicates(keep = 'first',inplace = True) df['Start TimeStamp'] = pd.to_datetime(df['Start TimeStamp']) df.sort_values(by='Start TimeStamp', inplace = True) df.to_csv(outfile, index=False) end = time.time() print(f'Duration of code for {first_excel}, {sheet_name} is {round((end - start),2)}seconds.') merge_data(first_excel,'A','AAA_Performance_Lot(2022)_N1.2.csv','A_AAA.csv')La salida es como
`¿Cuál es el nombre de su archivo de Excel?: 2362022
La duración del código para A.xlsx, AAA es de 2,24 segundos.
...
Completado`
Gracias.