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

229
Vistas
¿Cómo ordenar una lista de tuplas según el orden de un elemento de tupla en otra lista?
list_1 = [2, 7, 4, 5, 6, 1, 3, 8, 9] list_2 = [(1, 5), (2, 0), (3, 6), (4, 4), (5, 3), (6, 2), (7, 1), (8, 7), (9, 8)]

Quiero reordenar la lista list_2 de modo que el primer elemento de cada tupla siga el orden especificado por list_1 , entonces:

 list_2_ordered = [(2, 0), (7, 1), (4, 4), (5, 3), (6, 2), (1, 5), (3, 6), (8, 7), (9, 8)]

Intento usar la función de map para mapear el filter sobre list_1 como iterables (la idea general map(filter(lambda x,j : x[0]==j, list_2),list_1) . Pero, por supuesto, no funciona (Creo que debido a un error de tipo) ¿Cómo puedo hacer esto con la menor cantidad de líneas de código?

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

0

Elabore un diccionario para mapear su orden de clasificación (la clave es su número y el valor el orden en list_1) y use sorted con una key personalizada que asignará el primer elemento al diccionario (y por lo tanto el orden esperado):

 order = {k:v for v,k in enumerate(list_1)} list_2_ordered = sorted(list_2, key=lambda x: order.get(x[0], float('inf')))

Producción:

 [(2, 0), (7, 1), (4, 4), (5, 3), (6, 2), (1, 5), (3, 6), (8, 7), (9, 8)]

NÓTESE BIEN. order.get con float('inf') como segundo parámetro para manejar el caso en el que el primer elemento no está presente en order . En este caso, la tupla se ordenará al final. Si usa -1 como valor predeterminado, esto ordenará las claves desconocidas al principio

over 4 years ago · Santiago Trujillo Denunciar

0

Aquí hay una forma de obtener el resultado deseado en dos pasos:

(i) Cree el diccionario dic1 para buscar la posición de cada elemento en list1

(ii) Ordene list_2 por los primeros elementos usando sus posiciones en list_1 con el diccionario dic1

 dic1 = {k:v for k,v in zip(list_1, range(len(list_1)))} list_2.sort(key = lambda x: dic1[x[0]]) print(list_2)

Producción:

 [(2, 0), (7, 1), (4, 4), (5, 3), (6, 2), (1, 5), (3, 6), (8, 7), (9, 8)]
over 4 years ago · Santiago Trujillo Denunciar

0

Si quieres hacerlo en la menor cantidad de líneas de código:

 >>> list_2.sort(key=lambda t: list_1.index(t[0])) >>> list_2 [(2, 0), (7, 1), (4, 4), (5, 3), (6, 2), (1, 5), (3, 6), (8, 7), (9, 8)]

Otras soluciones aquí que involucran la creación de un dict son más eficientes para listas grandes (esa llamada index es O (n) por lo que toma el tipo de O (n log n) a O (n ^ 2)), pero para una lista pequeña como esto, es probable que la diferencia sea insignificante.

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