基于列表b对列表a进行排序的标准方法是将它们压缩在一起并使用sorted,如
sorted(zip(b,a))
但是,如果b中的两个元素相等,它将自动继续尝试按照a排序,这有时会导致问题。举个例子
import numpy as np
a=[np.array([4,5]),np.array([3,4])]
b=[1,1]
e=zip(b,a)
sorted(e)
这会导致错误
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
因此,当b中的两个元素相等时,它似乎按照a进行排序,但由于a包含numpy数组,排序算法在尝试比较它们时会抱怨。你知道吗
不管怎么说,这种行为是否符合预期?无论如何,我只想按b排序。如果两个元素相等,顺序就不重要了。有没有办法在不写排序算法的情况下解决这个问题?你知道吗
出现此错误的原因是
numpy.array
在排序意义上不可比较,即在比较两个数组时它不返回True
或False
值(而是另一个布尔数组),这与lists comparison不同。你知道吗如果您只想根据
b
排序,请为sorted
提供一个键函数:相关问题 更多 >
编程相关推荐