检查元组是不是出现在元组列表中时出现ValueError
Posted
技术标签:
【中文标题】检查元组是不是出现在元组列表中时出现ValueError【英文标题】:ValueError when checking if tuple occurs in list of tuples检查元组是否出现在元组列表中时出现ValueError 【发布时间】: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。
这很奇怪,因为我在检查之前是打印类型(请参阅我在问题中尝试过的内容)
【参考方案1】:
事实证明,有时大多数元组包含整数,有时它们包含 numpy int32 对象,这导致了错误。我通过将所有内容转换为字符串来修复它。
【讨论】:
以上是关于检查元组是不是出现在元组列表中时出现ValueError的主要内容,如果未能解决你的问题,请参考以下文章