2016-02-12 61 views
8

我有一個列表,以特定的順序:應用列表的順序到另一個列表

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

與主列表的元素的一些子表,但有一個不同的順序:

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

如何將L的訂單應用於L1L2

例如,處理後的正確的順序應該是:

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

我想這樣的事情,但我掙扎如何以正確的順序設置新的列表。

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

回答

12

看起來你只是想根據購買價值的下降L索引排序L1L2

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

或者只是'鍵= L.index'。 – GingerPlusPlus

+1

我對python並不熟悉,但無法想象它應該如何*不減少從O(n * log(n))到'O(n * n * log(n))排序的時間' 。如果是這種情況,那麼只適用於小列表。對於較大的列表,可能應該從元素到列表「L」中的索引建立某種「O(1)」查找字典。 – Marco13

2

這裏是另一種方式,你可以使用排序列表解析:

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