Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

118
Views
Cuente eficientemente todas las combinaciones de números que tengan una suma cercana a 0

Tengo el siguiente marco de datos de pandas df

 column1 column2 list_numbers sublist_column xy [10,-6,1,-4] ab [1,3,7,-2] pq [6,2,-3,-3.2]

sublist_column contendrá los números de la columna "list_numbers" que suman 0 (0.5 es una tolerancia) que he escrito siguiendo el código.

 def return_list(original_lst,target_sum,tolerance): memo=dict() sublist=[] for i, x in enumerate(original_lst): if memo_func(original_lst, i + 1, target_sum - x, memo,tolerance) > 0: sublist.append(x) target_sum -= x return sublist def memo_func(original_lst, i, target_sum, memo,tolerance): if i >= len(original_lst): if target_sum <=tolerance and target_sum>=-tolerance: return 1 else: return 0 if (i, target_sum) not in memo: c = memo_func(original_lst, i + 1, target_sum, memo,tolerance) c += memo_func(original_lst, i + 1, target_sum - original_lst[i], memo,tolerance) memo[(i, target_sum)] = c return memo[(i, target_sum)]

Luego estoy usando la función "return_list" en "sublist_column" para completar el resultado.

 target_sum = 0 tolerance=0.5 df['sublist_column']=df['list_numbers'].apply(lambda x: return_list(x,0,tolerance))

el siguiente será el marco de datos resultante

 column1 column2 list_numbers sublist_column xy [10,-6,1,-4] [10,-6,-4] ab [1,3,7,-2] [] pq [6,2,-3,-3.2] [6,-3,-3.2] #sum is -0.2(within the tolerance)

Esto me está dando el resultado correcto pero es muy lento (tarda 2 horas en ejecutarse si uso el IDE de spyder), ya que el tamaño de mi marco de datos tiene aproximadamente 50,000 filas, y la longitud de algunas de las listas en la columna "list_numbers" es más de 15 El tiempo de ejecución se ve particularmente afectado cuando el número de elementos en las listas de la columna "list_numbers" es superior a 15. Por ejemplo, la siguiente lista tarda casi 15 minutos en procesarse.

 [-1572.35,-76.16,-261.1,-7732.0,-1634.0,-52082.42,-3974.15, -801.65,-30192.79,-671.98,-73.06,-47.72,57.96,-511.18,-391.87,-4145.0,-1008.61, -17.53,-17.53,-1471.08,-119.26,-2269.7,-2709,-182939.59,-19.48,-516,-6875.75,-138770.16,-71.11,-295.84,-348.09,-3460.71,-704.01,-678,-632.15,-21478.76]

¿Cómo puedo mejorar significativamente mi tiempo de ejecución?

over 4 years ago · Santiago Trujillo
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!