2016-02-12 16 views
8

Ho un elenco, con un ordine specifico:Applicare l'ordine della lista all'altra liste

L = [1, 2, 5, 8, 3] 

E alcune liste sub con elementi della lista principale, ma con un ordine diverso:

L1 = [5, 3, 1] 
L2 = [8, 1, 5] 

Come posso applicare l'ordine di L a L1 e L2?

Per esempio, l'ordine corretto dopo l'elaborazione dovrebbe essere:

L1 = [1, 5, 3] 
L2 = [1, 5, 8] 

sto cercando qualcosa di simile, ma sto lottando come impostare la nuova lista con l'ordine corretto.

new_L1 = [] 
for i in L1: 
    if i in L: 
     print L.index(i) #get the order in L 

risposta

12

Sembra che si desidera solo per ordinare L1 e L2 secondo l'indice in cui il valore scende a L.

L = [1, 2, 5, 8, 3] 

L1 = [5, 3, 1] 
L2 = [8, 1, 5] 

L1.sort(key = lambda x: L.index(x)) 
L2.sort(key = lambda x: L.index(x)) 
+3

O semplicemente 'key = L.index'. – GingerPlusPlus

+1

Non ho familiarità con Python, ma non riesco a immaginare come questo dovrebbe * not * diminuire il tempo per l'ordinamento da 'O (n * log (n))' a 'O (n * n * log (n))' . Se questo è il caso, è possibile solo per le piccole liste. Per gli elenchi più grandi, si dovrebbe probabilmente creare una specie di dizionario 'O (1)' -lookup dagli elementi al loro indice nella lista 'L'. – Marco13

2

Ecco un altro modo è possibile ordinare utilizzando comprehensions Elenco:

>>> L = [1, 2, 5, 8, 3] 
>>> 
>>> L1 = [5, 3, 1] 
>>> L2 = [8, 1, 5] 
>>> 
>>> L1 = [i for i in L if i in L1] 
>>> L2 = [i for i in L if i in L2] 
>>> 
>>> L1 
[1, 5, 3] 
>>> L2 
[1, 5, 8]