Skip to main content
 首页 » 编程设计

python之在python中排序多维数组

2025年05月04日15dyllove98

我有一个数组并像这样填充它

arr = [[],[]] 
arr[0].append(post.attrib['href']) #strings 
arr[1].append(int(klass)) # int 

我需要按 arr[1] 对整个数组进行排序,例如输入:

[['string3', 'string45', 'string25'], [46, 2, 12]] 

和输出:

[['string45', 'string25', 'string3'], [2, 12, 46]] 

我试过了

arr[0].sort(key = x[1].__getitem__)  
arr[0].sort(key=lambda x: x[1]) 
arr = sorted(arr, key=itemgetter(1)) 

但是这一切都不正常

请您参考如下方法:

当您对复合元素进行排序时,创建一对您打算使用(zip 或 itertools.izip)进行排序的元素,并使用 operator.itemgetter , 选择正确的键。最后使用 zip 转回原始格式。

from operator import itemgetter 
zip(*sorted(zip(*arr), key = itemgetter(1))) 
[('string45', 'string25', 'string3'), (2, 12, 46)] 

这个想法可以扩展到列表中的多个键。

执行步骤

>>> arr #Original Array 
[['string3', 'string45', 'string25'], [46, 2, 12]] 
>>> zip(*arr) #Unpacking the array, transposes it 
[('string3', 46), ('string45', 2), ('string25', 12)] 
>>> sorted(zip(*arr), key = itemgetter(1)) #Sort the Transpose Array based on second element 
[('string45', 2), ('string25', 12), ('string3', 46)] 
>>> zip(*sorted(zip(*arr), key = itemgetter(1))) #Transpose the result to generate the original format 
[('string45', 'string25', 'string3'), (2, 12, 46)]