2016-02-12 25 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] 
相关问题