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是否不存在,那么为什么不能将其删除?
发生这种情况的原因是l is None
创建一个布尔数组,其中l
的每个元素是否为None。在if语句中使用它时,它是否为真是模棱两可的。
代替使用
l1 = [l for l in l1 if not type(l) == type(None)]
以过滤掉列表中的所有None
。
基本上,您的代码执行[a, b, c].remove(c)
,该操作类似于:
for x in [a, b, c]:
if x == c:
# remove x
if x == c:
在x
为a
的第一种情况下中断:a == None
返回一个新数组。
这就是为什么您收到该消息。马塞尔的答案有正确的解决方法。无论如何,当您遍历列表时,不应修改(使用remove
)列表。