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

200
Views
cómo crear un diccionario cuyas claves son (i, j) pares enteros con i < j

Tengo la intención de crear miles de pares de enteros, numerarlos y almacenarlos en un diccionario. Dado un número n , mi objetivo es generar cada par (i,j) tal que i<j .

Por ejemplo, si n=4 , los pares serán entonces el diccionario se verá como {(0, 1): 0, (0, 2): 1, (0, 3): 2, (1, 2): 3, (1, 3): 4, (2, 3): 5} .

Puedo generar este diccionario usando bucles for anidados, pero no es eficiente cuando n es grande. ¿Alguien podría ayudarme a realizar esta operación más rápido de lo que lo hago actualmente?

 d={} n=4 temp =0 for i in range(n): for j in range(n): if i <j: d.update({(i,j): temp}) temp+= 1
over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Este es un trabajo perfecto para itertools.combinations ya que solo producirá las combinaciones requeridas:

 from itertools import combinations n = 4 out = {k:v for v,k in enumerate(combinations(range(n), 2))}

salida: {(0, 1): 0, (0, 2): 1, (0, 3): 2, (1, 2): 3, (1, 3): 4, (2, 3): 5}

Usando tu código

Tenga en cuenta que podría volver a trabajar su código para producir solo las combinaciones requeridas:

 d={} n=4 temp = 0 for j in range(n): for i in range(j): d[(i,j)] = temp temp += 1 # {(0, 1): 0, (0, 2): 1, (1, 2): 2, (0, 3): 3, (1, 3): 4, (2, 3): 5}
over 4 years ago · Santiago Trujillo Report

0

Dando un paso más allá:

 from itertools import combinations, count n = 4 out = dict(zip(combinations(range(n), 2), count()))

¡Pruébelo en línea!

Parece ser un poco más rápido. Prueba con n = 1000:

 191.0 ms mozway 176.2 ms kelly 186.8 ms mozway 177.8 ms kelly 185.2 ms mozway 178.6 ms kelly

Código ( ¡Pruébelo en línea! ):

 from timeit import repeat from itertools import combinations, count def mozway(): return {k:v for v,k in enumerate(combinations(range(n), 2))} def kelly(): return dict(zip(combinations(range(n), 2), count())) n = 1000 for func in [mozway, kelly] * 3: t = min(repeat(func, number=1)) print('%5.1f ms ' % (t * 1e3), func.__name__)
over 4 years ago · Santiago Trujillo Report
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!