Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

141
Vistas
Transformar una lista de puntos en un "rango" de índices

Digamos que tengo una lista de puntos de un torneo

 points = [0, 12, 9]

Y quiero tener una clasificación de los jugadores, por lo que los resultados esperados serían

 [1, 2, 0]

Porque el índice 1 está primero en el ranking, seguido por el índice 2 y luego el índice 0. Mi idea era usar un for para iterar a través de todos los números, obtener el valor más grande, encontrar el índice del valor más grande y luego asignar el valor. en el ranking, pero me parece innecesariamente largo y complicado. ¿Algun consejo?

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Uso sorted :

 points = [0, 12, 9] res = sorted(range(len(points)), key=lambda x: points[x], reverse=True) print(res)

Producción

 [1, 2, 0]

La idea es ordenar los índices de la lista ( range(3) ) según su valor en la lista, por lo tanto, key=lambda x: points[x] . El verdadero inverso es porque desea una clasificación descendente.

over 4 years ago · Santiago Trujillo Denunciar

0

points = [0, 12, 9] points_and_indices = [(p, i) for i, p in enumerate(points)] points_and_indices.sort(reverse=True) indices = [i for p, i in points_and_indices] print(indices)

producción:

 [1, 2, 0]

ACTUALIZAR

dices en un comentario

El primer índice que obtuvo esa cantidad de puntos está adelante

Desafortunadamente, esto hace que la solución anterior sea incorrecta para sus propósitos, porque los índices se incluyen en orden inverso.

Para explotar la estabilidad de las ordenaciones de Python, debemos no incluir los índices en la ordenación inversa o usar una función decreciente de los puntos en lugar de los puntos mismos.

Podemos clasificar según los puntos negativos y también condensarlo todo en una sola línea, como esta:

 points = [0, 12, 9, 12] indices = [i for _, i in sorted((-p, i) for i, p in enumerate(points))] print(indices)

producción:

 [1, 3, 2, 0]

De todos modos, la solución de Dani Mesejo es más pitónica, aunque el uso de una clave de clasificación puede causar algunos problemas a las personas que vienen de otros lenguajes de programación.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda