Python ValueError:具有多个元素的数组的真值不明确。使用a.any()或a.all()

问题描述 投票:0回答:2

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是否不存在,那么为什么不能将其删除?

python python-3.6 numpy-ndarray valueerror
2个回答
1
投票

发生这种情况的原因是l is None创建一个布尔数组,其中l的每个元素是否为None。在if语句中使用它时,它是否为真是模棱两可的。

代替使用

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

以过滤掉列表中的所有None


1
投票

基本上,您的代码执行[a, b, c].remove(c),该操作类似于:

for x in [a, b, c]:
    if x == c:
        # remove x

if x == c:xa的第一种情况下中断:a == None返回一个新数组。

这就是为什么您收到该消息。马塞尔的答案有正确的解决方法。无论如何,当您遍历列表时,不应修改(使用remove)列表。

© www.soinside.com 2019 - 2024. All rights reserved.