【发布时间】:2021-10-20 03:20:09
【问题描述】:
当我运行我的代码时,我突然收到一个意外错误:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
我正在尝试检查列表中是否出现元组:
concat_tuples = [(7, 18), (7, [0, 10, 19]), (7, 16)]
to_explode = [c for c in concat_tuples if any(isinstance(x, list) and
len(x) > 1 for x in c)]
# >> to_explode = [(7, [0, 10, 19])]
not_explode = [x for x in concat_tuples if x not in to_explode]
但是,我的最后一行代码在我的脚本中针对第一个值(可能也针对其他值)失败了。奇怪的是它可以在我的 Python 控制台中工作,但不能在我的脚本(pytests)中工作。我的脚本可能出了什么问题?
我的尝试
- 使用
list.index()检查列表中是否存在。这也会失败并出现同样的错误 - 已检查 x 和 to_explode 的类型,它们分别是元组和元组列表
- 重新格式化代码:列表理解为常规 for 循环,仍然没有成功
- 在 Python 控制台中运行代码,有效
【问题讨论】:
-
我收到
NameError说concat_tuple未定义。您是否碰巧有两个不相关的变量,分别称为concat_tuple和concat_tuples? -
我查过了,但这只是我的问题中的一个错字
-
可以重现错误的关联测试用例是什么?就像现在一样,其他任何人都无法回答这个问题,因为他们无权访问实际失败的代码。
-
看起来导致问题的不是标准的
list或tuple类型,而是一些numpy数组-参见示例thread。 -
这很奇怪,因为我在检查之前是打印类型(请参阅我在问题中尝试过的内容)
标签: python list if-statement tuples valueerror