检查元组是不是出现在元组列表中时出现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 控制台中运行代码,有效

【问题讨论】:

我收到 NameErrorconcat_tuple 未定义。您是否碰巧有两个不相关的变量,分别称为 concat_tupleconcat_tuples 我查过了,但这只是我的问题中的一个错字 可以重现错误的关联测试用例是什么?就像现在一样,其他任何人都无法回答这个问题,因为他们无权访问实际失败的代码。 看起来导致问题的不是标准的listtuple 类型,而是一些numpy 数组-参见示例thread。 这很奇怪,因为我在检查之前是打印类型(请参阅我在问题中尝试过的内容) 【参考方案1】:

事实证明,有时大多数元组包含整数,有时它们包含 numpy int32 对象,这导致了错误。我通过将所有内容转换为字符串来修复它。

【讨论】:

以上是关于检查元组是不是出现在元组列表中时出现ValueError的主要内容,如果未能解决你的问题,请参考以下文章

Python基础--元组(tuple)

Python基础-04元组

Python基础-04元组

在元组列表中查找元素

在元组列表中查找索引位置

Python:在元组列表和嵌套列表中比较并查找匹配项