python中多维数组的排序

2024-09-27 21:25:53 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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

^{pr2}$

和输出:

[['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))

但这一切都不正常


Tags: key排序数组sortpostinthrefarr
3条回答

您是否考虑过将数据存储为一个包含两个元素对的列表(例如[(46, 'string3'), (2, 'string45'), (12, 'string25')])而不是?因为如果你这么做了,你的问题会在一行代码中自行解决:

l = [(46, 'string3'), (2, 'string45'), (12, 'string25')]
print sorted(l) 
# [(2, 'string45'), (12, 'string25'), (46, 'string3')]

顺便说一下,它们是列表,不是数组。Python中的数组意味着其他东西(即NumPy数组)。在

我发现打包和解包的论点有时有点不直观,所以

l = [['string3', 'string45', 'string25'], [46, 2, 12]]
[[y[1] for y in sorted(zip(l[1], x))] for x in l]
[['string45', 'string25', 'string3'], [2, 12, 46]]

在对复合元素排序时,创建一对要使用(zipitertools.izip)排序的元素,并使用operator.itemgetter来选择正确的键。最后使用zip将其转换回原始格式。在

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

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

执行步骤

^{pr2}$

相关问题 更多 >

    热门问题