2017-01-24 66 views
0

我有一个包含许多元素和不同长度行的2D列表。我们称之为ListA。 我为了listA的是这样的:根据我如何用Python对另一个2D列表行进行排序来排序2D列表

listA.sort(key=len) 

我还有一个二维表(listB),我想有点像一个排序。如果A的第3行成为第一行,则B的第三行必须先等等。

我该怎么办?

我不想使用numpy。

编辑:我试图更清晰:

假设一个矩阵A做出这样的(原来矩阵是很多大)

A = [ 
    [ 
     [86,98,98,0,0] 
    ], 

    [ 
     [79,71,105,1,1], [79,71,106,1,1], [80,72,105,0,2] 
    ], 

    [ 
     [86,81,27,1,1], [85,80,25,1,0] 
    ], 

    [ 
     [99,80,73,1,1], [99,81,73,2,1] 
    ] 

]

这个矩阵具有4行长度不同(1,3,2,2)。实际上每个长度都包含我的分析的坐标和其他值。 我想订购A,以便首先使用最短的一行,最后使用最长的一行。在这种情况下(1,2,2,3)

现在我也有具有相同的行数为A的另一矩阵B但相比A.

B = [ 
    [ 
     [8,79,3],[8,77,42] 
    ], 
    [ 
     [10,83,70] 
    ], 
    [ 
     [9,81,74], [13,67,43], [4,15,88] 
    ], 
    [ 
     [5,14,88] 
    ] 
] 

我想可能有不同的长度到B的行进行排序,以在A.对应的排序行

+1

的可能的复制[基于从另一个列表中的值排序列表?(http://stackoverflow.com/questions/6618515/sorting-list-based-on-values- from-another-list) – Prune

+0

A是否具有与B相同长度的行数量完全相同?如果是这样,那么也许你想要的是一个字典,它从A获得密钥并赋予它们B的值。然后,你可以用它来做任何你需要的。 – 098799

+2

你是不是发布了一个列表的例子,使其更加有趣或背后的想法是什么? –

回答

0

随着更新的问题,你的问题现在已经很清楚了。

您可以使用与我以前的答案类似的逻辑。

A=[[[86,98,98,0,0]],[[79,71,105,1,1],[79,71,106,1,1],[80,72,105,0,2]], [[86,81,27,1,1],[85,80,25,1,0]], [[99,80,73,1,1],[99,81,73,2,1]]] 

B=[[[8,79,3],[8,77,42]],[[10,83,70]],[[9,81,74],[13,67,43],[4,15,88]],[[5,14,88]]] 

#check the length of each row and pair it into a new array 
tempA = [] # array 
for index in range(len(A)): 
    itemLength = len(A[index]) 
    tempA.append([itemLength,index, A[index]]) 

tempB = {} #dict 
for index in range(len(B)): 
    tempB[index] = B[index] 

# sort tempA according to row length 
tempA.sort() 
B = [] 
A = [] 
for item in tempA: 
    indexBeforeSorting = item[1] 
    B.append(tempB[indexBeforeSorting]) 
    A.append(item[2]) 

这工作完全

+0

它以某种方式创建了一个矩阵,第一行包含所有排序的内容,而其他所有行均为空。但这不是我所需要的。你还有其他建议吗? –

+0

@MichelePaoletti查看更新后的答案。它适用于您的问题。让我知道结果。 –

+0

令人惊叹。非常感谢。 –

0

这是我怎么会去这样做:

a = ['easd', 'sdvgweag', '21x', 'npasp oopp agt'] 
b = [42, 7642, 2146, 12] 

temp = list(zip(a, range(len(a)))) 
temp.sort(key=lambda x: len(x[0])) 
a.sort(key=len) 
print(a) # ['21x', 'easd', 'sdvgweag', 'npasp oopp agt'] 
print([b[i] for i in [x[1] for x in temp]]) # [2146, 42, 7642, 12] 

这背后的想法是添加跟踪的一些机制列表中的更改a。这就是zip()所做的。

+0

@leaf我没有注意到,并且谢谢你指出,但是这个想法和实现完全一样。当OP发布一些示例时,我会进行更新。 –

相关问题