【问题标题】:Phython - While loop for a list until it is empty [duplicate]Python - 列表的While循环直到它为空[重复]
【发布时间】:2021-05-25 15:31:50
【问题描述】:

我正在尝试编写以下代码:

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.any() 或 a.all()。

有人可以告诉我我的代码有什么问题,或者告诉我应该怎么做吗?

【问题讨论】:

  • 使用列表而不是 numpy 数组,它会起作用。
  • 我想是的,据我了解,我应该写'while eqvec.any():'。现在我不再收到错误了

标签: python arrays numpy while-loop


【解决方案1】:

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

如果您希望结果是列表中的 a,那么您可以将其传递给 list

【讨论】:

    【解决方案2】:

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

    while eqvec.size != 0:
    

    请注意,如果 eqvec 是一个列表而不是一个 numpy 数组,这是行不通的!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-17
      • 1970-01-01
      • 2020-09-29
      • 2021-11-13
      • 2021-07-21
      • 1970-01-01
      • 1970-01-01
      • 2014-08-29
      相关资源
      最近更新 更多