对两个列表进行排序一个是列表列表

2024-10-04 01:31:07 发布

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

我有两个纽比阵列。一个是N乘M,另一个是N乘1。我希望能够按M维中的任何一个对第一个列表进行排序,并且我希望列表保持相同的顺序(即,如果我交换了list1的第1行和第15行,我希望list2的第1行和第15行也交换)

例如:

import numpy as np
a = np.array([[1,6],[3,4],[2,5]])
b = np.array([[.5],[.8],[.2]])

然后,我希望能够按a中每行的第一个元素进行排序,以给出:

^{pr2}$

或者按a中每一行的第二个元素排序:

^{3}$

我看到很多类似的问题,其中两个列表都是一维的,比如这个question。或者关于列表排序的问题,例如this one。但我找不到我要找的东西。在

最终我得到了这样的结果:

import numpy as np
a = np.array([[1,6],[3,4],[2,5]])
b = np.array([[.5],[.8],[.2]])
package = zip(a,b)
print package[0][1]
sortedpackage= sorted(package, key=lambda dim: dim[0][1])
d,e = zip(*sortedpackage)
print d
print e

现在这就产生了我想要的d和e:

  d = [[3,4],[2,5],[1,6]]
  e = [[.8],[.2],[.5]

但我不明白为什么。print package[0][1]给出了0.5——这不是我排序所依据的元素。为什么会这样?我所做的一切是否稳健?在


Tags: importnumpy元素package列表排序顺序as
3条回答

要对多个numpy数组应用相同的排序顺序,可以使用^{}。例如,要按第二列排序:

indices = a[:,1].argsort()
print(a[indices])
print(b[indices])

输出:

^{pr2}$

在您的package内:

package[0](a[0], b[0]) 因此,package[0][1]是b[0]。在

您的包是三重嵌套的。key=lambda dim : dim[0][1]表示使用item[0][1]作为键对package进行排序。packageitem组成,item是双嵌套的。在

要查看排序依据的元素,请使用package[x][0][1]x作为该项的索引

print package[0][1]返回0.5的原因是它“作为一个整体”访问元组列表中的数字,而sorted则查看给定iterable的每个单独元素。在

您将a和{}压缩到package

[([1, 6], [0.5]),
 ([3, 4], [0.8]),
 ([2, 5], [0.2])]

在这一点上你print package[0][1]。第一个元素是用package[0]=([1, 6], [0.5])获得的。下一个索引[1]给出了第一个元组的第二个元素,因此得到了0.5。在

考虑到sorted,函数正在检查iterable的元素,单独地。它可能首先查看([1, 6], [0.5]),然后([3, 4], [0.8]),依此类推。在

因此,当您使用lambda函数指定一个键时,对于iterable的这个特定元素,获得位于[0][1]的值。也就是说,按给定元组的第一个元素的第二个值排序(a的第二个值)。在

相关问题 更多 >