当第二个列表包含numpy数组时,根据python中的其他列表对列表进行排序不起作用

2024-03-28 09:49:13 发布

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

基于列表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排序。如果两个元素相等,顺序就不重要了。有没有办法在不写排序算法的情况下解决这个问题?你知道吗


Tags: 方法importnumpy算法元素列表标准排序
1条回答
网友
1楼 · 发布于 2024-03-28 09:49:13

出现此错误的原因是numpy.array在排序意义上不可比较,即在比较两个数组时它不返回TrueFalse值(而是另一个布尔数组),这与lists comparison不同。你知道吗

如果您只想根据b排序,请为sorted提供一个键函数:

sorted(e, key=lambda x: x[0])
# [(1, array([4, 5])), (1, array([3, 4]))]

相关问题 更多 >