Python 为什么可以';我没有检测到元组是空的吗?

Python 为什么可以';我没有检测到元组是空的吗?,python,arrays,numpy,tuples,Python,Arrays,Numpy,Tuples,我使用numpy中的where函数在字符串数组中查找一个单字母字符串。 例如: 我将在['B'U'A'M'R'O']中查找'U',并获取'U'的索引 letter = 'U' row = ['B', 'U', 'A', 'M', 'R', 'O'] letter_found = np.where(row == letter) 但是,当我查找字符串数组中不存在的字母时,会得到一个空元组,如下所示: (array([], dtype=int64),) 我需要能够检测到它何时在数组中找不到我要查找

我使用numpy中的where函数在字符串数组中查找一个单字母字符串。 例如: 我将在
['B'U'A'M'R'O']
中查找
'U'
,并获取
'U'
的索引

letter = 'U'
row = ['B', 'U', 'A', 'M', 'R', 'O']
letter_found = np.where(row == letter)
但是,当我查找字符串数组中不存在的字母时,会得到一个空元组,如下所示:

(array([], dtype=int64),)
我需要能够检测到它何时在数组中找不到我要查找的字母

我尝试了以下方法:

if not letter_found:
    print 'not found'
if any(map(len, my_tuple)):
    #passes if any of the contained items are not empty
但这是行不通的。如何检测从
numpy
中的where函数返回的
tuple
为空?是因为我的一个变量可能是错误的类型吗?我是python和编程方面的新手

名称:

if some_iterable:
    #only if non-empty
只有当某物为空时才起作用。在您的例子中,元组实际上不是空的。元组包含的内容是空的。因此,您可能需要执行以下操作:

if not letter_found:
    print 'not found'
if any(map(len, my_tuple)):
    #passes if any of the contained items are not empty

由于空iterable上的
len
将产生
0
,因此将转换为
False

您的测试失败,因为
找到的字母实际上是一个包含一个元素的元组,所以它不是空的
numpy。其中
返回索引值的元组,测试数组中的每个维度对应一个元组。通常在一维数组中搜索时,我使用Python的元组解包来避免这种情况:

letter = 'U'
row = ['B', 'U', 'A', 'M', 'R', 'O']
letter_found, = np.where(row == letter)
注意
字母\u后的逗号
。这将从
numpy.where
中解压缩结果,并将
找到的字母指定为该元组的第一个元素

还要注意,
字母\u found
现在将引用numpy数组,它不能在布尔上下文中使用。您必须执行以下操作:

if len(letter_found) == 0:
    print('not found!')

不需要
map(len…
这里,只要
any(my\u tuple)
就可以了!我不确定just
any(my\u tuple)
是否适用于这种特定情况,因为tuple的元素是
numpy
数组,不能直接在布尔上下文中使用。