首页 > 解决方案 > Python ValueError:具有多个元素的数组的真值不明确。使用 a.any() 或 a.all()

问题描述


a = np.random.randint(1, 10, (3,3))
b = np.random.randint(1, 10, (3,3))
c = None

l1 = [a, b, c]

for l in l1:
  if l is None:
    l1.remove(l)
  l1

我收到 ValueError:具有多个元素的数组的真值不明确。使用 a.any() 或 a.all()。既然它已经检查了 l 是否为 none 那么它为什么不能删除它呢?

标签: pythonnumpy

解决方案


发生这种情况的原因是,当尝试从 中删除l(即None)时l1remove(l)会遍历数组并检查每个元素是否等于l。一旦找到这个元素,它就会从列表中删除它。在进行比较时,它会遇到a, 并检查是否a == None为真。这将创建一个布尔数组,其中的每个元素是否l为无。当您在 if 语句中使用它时,它是否为真是模棱两可的。

而是使用

l1 = [l for l in l1 if not type(l) == type(None)]

过滤掉None列表中的所有 s。


推荐阅读