2012-12-04 176 views
-3

我有两个列表排序基于另一阵列

A = [5,2,3,4,1]

B = [3,1,5]

我想要的阵列使用A对B进行排序,使得输出反映为: [5,3,1]

我该如何实现该功能?

+2

你有试过什么吗?先分享代码。 –

回答

4

你可以使用......但一切都取决于你以后 - 还有其他办法...

>>> a = [5, 2, 3, 4, 1] 
>>> b= [3, 1, 5] 
>>> sorted(b, key=a.index) 
[5, 3, 1] 

或者作为@Manan指出 - 你可以就地排序使用a.sort(...)

3

对于在地方排序这应该这样做:

B.sort(key=A.index) 

否则,你能做到这一点(按照乔恩克莱门茨...):

BSorted = B.sorted(key=A.index) 

这是如何工作:

key参数是一个函数(这是很常见的在这里使用lambda表达式......)名单根据函数的输出进行排序。下面的例子说明:

A = [{'a':100,'b':10},{'a':56,'b':100},{'a':90,'b':90}] 
A.sort(key=lambda x:x['a']) 
print(A) 
A.sort(key=lambda x:x['b']) 
print(A) 

此输出:

[{'a':56,'b':100},{'a':90,'b':90},{'a':100,'b':10}] 
[{'a':100,'b':10},{'a':90,'b':90},{'a':56,'b':100}] 
0

如果我对你的问题的理解是正确的,要做到以下几点:

A = [5,2,3,4,1] 
B = [3,1,5] 
C = [] 
for i in range(len(A)): 
    if A[i] in B: 
     C += [A[i]] 

print C# [5, 3, 1] 

希望这有助于。

+0

或者,那写成'C = [el for A in if if in B]''? –