python - While循环一个列表,直到它为空



我试着写下面的代码:

def ordering(n):
eqvec=np.zeros(n)
bvec=[]
for i in range(n):
eqvec[i]=orderingeq(n,i+1)
while eqvec:
index_max=np.argmax(eqvec)
bvec.append(index_max)
eqvec.remove(index_max)
return bvec

在这段代码中我有两个向量。第一个向量'eqvec'包含一些由方程'orderingeq'确定的数字。从这一点上,我需要用向量'eqvec'的最大值的索引值填充向量'bvec'。从我在网上找到的东西来看,这应该是可行的,或者至少我没有找到另一种方法来做到这一点。但是我得到了与'while eqvec:'行相对应的错误信息。

包含多个元素的数组的真值是二义性的。使用a.a any()或a.a all()

有没有人可以帮助我,告诉我我的代码有什么问题,也许告诉我应该怎么做?

这是检查numpy数组是否为空的正确方法。试一试:

while eqvec.size != 0:

请注意,如果eqvec是一个列表而不是numpy数组,这将不起作用!

我想bvec = np.flip(np.argsort(eqvec))会给你你所需要的。np.argsort(eqvec)会给你一个索引位置的数组,从最小到最大,然后np.flip会反转索引位置,所以你的最大元素的位置是第一,第二大元素的位置是第二,等等。

如果你希望结果是一个列表,那么你可以把它传递给list

最新更新