¿Existe alguna forma de saltarse algunas combinaciones en itertools?
Hola chicos, tengo un archivo JSON con 1200 nombres de ciudades y sus poblaciones.
Estoy combinando esas ciudades de a 3 usando itertools.combination:
import json
from itertools import combinations as com
def main():
data = json.load(open('new.json'))
x = com(data, 3)
triples_dict = [i for i in x]
main()
Este es solo un código de prueba, pero tarda demasiado en ejecutarse, sé que hay muchas combinaciones, y en realidad no necesito tantas; más adelante elegiré solo 10000 combinaciones basadas en alguna probabilidad lineal: cuanto mayor sea la suma de la población de 3 ciudades, menos probable será que esta combinación se incluya en esas 10000 combinaciones.
Estoy buscando una forma de optimizar la fase de combinación. Estaba pensando en saltar algunas combinaciones, por ejemplo, saltar cada cuarta combinación, pero no puedo encontrar una forma de hacerlo.
davy.ai
Una forma de optimizar la fase de combinación es utilizar el método
itertools.islice
para omitir ciertas combinaciones. Este método te permite seleccionar un subconjunto de elementos de un iterador especificando un valor de inicio, parada y paso.Por ejemplo, para omitir cada 4ª combinación, puedes modificar el código de la siguiente manera:
En este código, utilizamos una variable
step
para indicar cuántas combinaciones omitir. Luego recorremos toda la lista de combinacionesx
, utilizandorange()
para generar índices con un tamaño de paso destep
. Para cada índice, creamos un nuevo iterador que omite las siguientesstep
combinaciones utilizandoislice
. Luego extendemos nuestra listatriples_dict
con los resultados de cada subiterador.Este enfoque debería ayudar a acelerar la fase de combinación, aunque es posible que necesites experimentar con diferentes tamaños de paso para encontrar el equilibrio óptimo entre velocidad y precisión.