Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: flony en 20 Septiembre 2022, 03:10 am



Título: buscar un resultado especifico en una lista
Publicado por: flony en 20 Septiembre 2022, 03:10 am
tengo una lista de números quiero saber si la suma de alguna combinación de ellos da un número especifico si es así lo muestre por pantalla esos números y si no que muestre no hay combinación posible
la lista es [1484.22, 108232.76, 176396.21, 24198.48, 169730.89, 678014.29, 290686.27, 230137.01, 44312.82, 13455.77, 28043.32, 192772.68, 18959.6, 25437.53, 541800.77, 12484.72, 57927.72, 409054.79, 40875.61, 71816.21, 113477.16, 222382.1, 7257.94, 143278.25, 2273.06, 118080.24, 45247.6, 133151.58, 267.97, 1018.53, 50602.21, 19182.73, 373.29, 14702.22, 4041.68, 80831.78, 1189.09, 20255.8, 46619.66, 5016.87, 23460.55, 109208.0, 107395.87]
el código que tengo es el siguiente
Código:
import pandas as pd

lista_trabajar = pd.read_excel('preproceso.xlsx')

monto_a_trabajar = lista_trabajar.iloc[:, -1]
monto = monto_a_trabajar.tolist()
monto_A_Buscar = 1346675.28
resultado = []

print (monto)

def suma(monto, monto_A_Buscar):
    for i in monto:
        resultado.append(i)
        resul = sum(resultado)
        if resul == monto_A_Buscar:
            return resultado
        else: print ('no salio')


Título: Re: buscar un resultado especifico en una lista
Publicado por: reymosquito en 20 Septiembre 2022, 05:39 am
hay muchas formas de hacerlo, te muestro una, como al fin y al cabo solo estás trabajando con una lista no hago lo de pandas, cambio los nombres para escribir menos y agrego un último valor a la lista solo para verificar si funciona:
Código
  1. lista = [1484.22, 108232.76, 176396.21, 24198.48, 169730.89, 678014.29, 290686.27, 230137.01, 44312.82, 13455.77,
  2.         28043.32, 192772.68, 18959.6, 25437.53, 541800.77, 12484.72, 57927.72, 409054.79, 40875.61, 71816.21, 113477.16,
  3.         222382.1, 7257.94, 143278.25, 2273.06, 118080.24, 45247.6, 133151.58, 267.97, 1018.53, 50602.21, 19182.73,
  4.         373.29, 14702.22, 4041.68, 80831.78, 1189.09, 20255.8, 46619.66, 5016.87, 23460.55, 109208.0, 107395.87,1345191.06]
  5. k =1346675.28
  6.  
  7. def suma(iterador,k):
  8.    resultado = []
  9.    for elemento in iterador:
  10.        if k - elemento in lista :
  11.            resultado.append((elemento,k- elemento))
  12.    if len(resultado) > 0:
  13.        return resultado
  14.    return 'No salió'
  15.  
  16. print(suma(lista,k))
  17.  
  18.  


Título: Re: buscar un resultado especifico en una lista
Publicado por: chronologie en 20 Septiembre 2022, 06:48 am
dependiendo de la cantidad de datos, puedes hacer una busqueda binaria y ahorrar proceso y mayor rapidez.


Título: Re: buscar un resultado especifico en una lista
Publicado por: flony en 25 Septiembre 2022, 00:54 am
muchas gracias por la data