2016-02-12 6 views
8

ich eine Liste habe, mit einer bestimmten Reihenfolge:Tragen Sie die Reihenfolge der Liste an ein anderes Listen

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

Und einige Teillisten mit Elementen der Hauptliste, aber mit einer anderen Reihenfolge:

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

Wie kann ich die Bestellung von L auf L1 und L2 anwenden?

Zum Beispiel sollte die richtige Reihenfolge nach der Verarbeitung sein:

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

ich so etwas wie dies bin versucht, aber ich habe Schwierigkeiten, wie die neue Liste mit der richtigen Reihenfolge zu setzen.

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

Antwort

12

Sieht aus wie Sie gerade L1 und L2 nach dem Index sortiert werden soll, wenn der Wert in L fällt.

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

Oder nur 'key = L.index'. – GingerPlusPlus

+1

Ich bin nicht vertraut mit Python, aber kann mir nicht vorstellen, wie dies * nicht * die Zeit für das Sortieren von "O (n * log (n))" auf "O (n * n * log (n))" verringern sollte . Wenn dies der Fall ist, ist dies nur für kleine Listen möglich. Für größere Listen sollte man wahrscheinlich ein "O (1)' -Lookup-Lexikon von den Elementen zu ihrem Index in der Liste "L" erstellen. – Marco13

2

ist hier eine andere Art und Weise Sie Listenkomprehensionen mit sortieren:

>>> 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] 
Verwandte Themen