2016-02-12 11 views
8

Mam listę, o określonej kolejności:Zastosuj kolejność listy do kolejnych listach

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

a niektóre list sub z elementami listy głównej, ale z innej kolejności:

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

Jak zastosować kolejność L do L1 i L2?

Na przykład, prawidłowa kolejność po przetwarzania powinny być:

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

Próbuję coś takiego, ale walczę jak ustawić nową listę z właściwej kolejności.

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

Odpowiedz

12

Wygląda po prostu chcesz sortować L1 i L2 według indeksu gdy wartość spada w 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

Albo po prostu 'key = L.index'. – GingerPlusPlus

+1

Nie jestem zaznajomiony z python, ale nie mogę sobie wyobrazić, jak to powinno * nie * zmniejszyć czas sortowania z 'O (n * log (n))' do 'O (n * n * log (n))' . W takim przypadku jest to możliwe tylko w przypadku małych list. W przypadku większych list, należy prawdopodobnie zbudować słownik "O (1)" z elementów do ich indeksu na liście 'L'. – Marco13

2

Oto kolejny sposób można sortować za pomocą listowe:

>>> 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] 
Powiązane problemy