Ordenar los valores de la primera lista usando la segunda lista en Python

Dadas dos listas, ordene los valores de una lista usando la segunda lista.
 

Ejemplos: 

Input : list1 = ["a", "b", "c", "d", "e", "f", "g", "h", "i"]
        list2 = [ 0,   1,   1,    0,   1,   2,   2,   0,   1]

Output :['a', 'd', 'h', 'b', 'c', 'e', 'i', 'f', 'g']


Input : list1 = ["g", "e", "e", "k", "s", "f", "o", "r", "g", "e", "e", "k", "s"]
        list2 = [ 0,   1,   1,    0,   1,   2,   2,   0,   1]

Output : ['g', 'k', 'r', 'e', 'e', 'g', 's', 'f', 'o']

Acercarse : 
 

  1. Comprima las dos listas.
  2. Cree una nueva lista ordenada basada en el zip usando sorted().
  3. Usando una lista de comprensión, extraiga los primeros elementos de cada par de la lista ordenada y comprimida.

Concepto: 
el propósito de zip() es mapear un índice similar de múltiples contenedores para que puedan usarse como una sola entidad.
A continuación se muestra la implementación del enfoque anterior:
 

Python

# Python program to sort
# one list using
# the other list
 
def sort_list(list1, list2):
 
    zipped_pairs = zip(list2, list1)
 
    z = [x for _, x in sorted(zipped_pairs)]
     
    return z
     
 
# driver code
x = ["a", "b", "c", "d", "e", "f", "g", "h", "i"]
y = [ 0,   1,   1,    0,   1,   2,   2,   0,   1]
 
print(sort_list(x, y))
 
x = ["g", "e", "e", "k", "s", "f", "o", "r", "g", "e", "e", "k", "s"]
y = [ 0,   1,   1,    0,   1,   2,   2,   0,   1]
 
print(sort_list(x, y))

Producción: 
 

['a', 'd', 'h', 'b', 'c', 'e', 'i', 'f', 'g']
['g', 'k', 'r', 'e', 'e', 'g', 's', 'f', 'o']

Complejidad de tiempo: O(nlogn)
Espacio auxiliar: O(n)
En el código anterior, tenemos dos listas, la primera lista se ordena con respecto a los valores de la segunda lista. 
 

y = [ 0,   1,   1,    0,   1,   2,   2,   0,   1]

Aquí primero se comprueba el valor más bajo. Como en esta lista, 0 es el más bajo, por lo que a partir del primer índice, 0 es el más bajo y está en el índice 0. Entonces, el valor del índice 0 se almacena en el índice 0 en la primera lista. De manera similar, 0 se encuentra nuevamente en el índice 3 y, por lo tanto, el valor del índice 3 en la primera lista es el índice 1. Lo mismo ocurre hasta que la lista no se completa.
 

Enfoque 2: mediante el uso de Diccionario, comprensión de listas, función lambda

Python3

def sorting_of_element(list1,list2):
   
    # initializing blank dictionary
    f_1 = {}
     
    # initializing blank list
    final_list = []
     
    # Addition of two list in one dictionary
    f_1 = {list1[i]: list2[i] for i in range(len(list2))}
     
    # sorting of dictionary based on value
    f_lst = {k: v for k, v in sorted(f_1.items(), key=lambda item: item[1])}
     
    # Element addition in the list
    for i in f_lst.keys():
        final_list.append(i)
    return final_list
         
list1 = ["a", "b", "c", "d", "e", "f", "g", "h", "i"]
list2 = [ 0,   1,   1,    0,   1,   2,   2,   0,   1]
 
 
list3=sorting_of_element(list1,list2)
print(list3)

Producción:

['a', 'd', 'h', 'b', 'c', 'e', 'i', 'f', 'g']

Complejidad de tiempo : O (nlogn)

Complejidad espacial : O(n)

Publicación traducida automáticamente

Artículo escrito por saketkumr y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *