【问题标题】: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
  • 这很奇怪,因为我在检查之前是打印类型(请参阅我在问题中尝试过的内容)

标签: python list if-statement tuples valueerror


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2012-09-02
    • 2020-12-03
    • 2017-09-24
    • 1970-01-01
    • 2018-04-24
    • 1970-01-01
    • 2019-12-01
    • 2018-09-04
    • 1970-01-01
    相关资源
    最近更新 更多