Python 检查元组中的值是否失败并显示 numpy 数组

Python check if value in tuple fails with numpy array

提问人:KindaTechy 提问时间:10/27/2023 更新时间:10/27/2023 访问量:52

问:

我有一个返回元组的函数,我需要检查元组中是否有特定元素。我不知道元组中会有什么类型的元素,但我知道我想要一个完全匹配的元素。例如,我想要

1 in (1, [0, 6], 0) --> True
1 in ([1], 0, 6]) --> False

这应该很简单,对吧?我只是检查.1 in tuple_output_from_function

如果元组中有一个 numpy 数组作为元素,则会中断

import numpy as np
s = tuple((2, [0, 6], 1))
4 in s --> False

t = tuple((2, np.arrary([0, 6]), 1))
4 in t --> ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

我希望第二种情况返回 False,因为 4 不在元组中。即使它在数组中,我仍然期望 False。我可以毫无错误地做到这一点。为什么这会中断,我怎样才能使我的检查对它鲁棒,而不假设会有一个 numpy 数组或必须显式检查它?0 in t[1]

python 数组 numpy 元组

评论


答:

2赞 Andrej Kesely 10/27/2023 #1

它中断了,因为如果你运算符,引擎盖下的 Python 正在使用相等运算符 ()。in==

考虑一下:

t = (2, np.array([0, 6]), 1)
v = 1

print(v in t)

Python 检查元组中的每个值是否相等。对于 numpy 数组,操作是另一个布尔数组。然后,Python 会检查此结果是否真实,这会引发您看到的异常。t1 == np.array([0, 6])[False False]

您可以使用并检查您检查的当前值是否为该值的类型:any()int

t = (2, np.array([0, 6]), 1)
v = 1

x = any(v == i for i in t if isinstance(i, int))
print(x)

指纹:

True

评论

0赞 slothrop 10/27/2023
也许一个有用的增强功能是?然后,您可以复制 True 的本机行为。isinstance(i, numbers.Number)4 in (4.0, 5.0)