Python 布尔数组的元素列表

Python 布尔数组的元素列表,python,arrays,numpy,data-structures,scipy,Python,Arrays,Numpy,Data Structures,Scipy,假设我的清单如下: ['cat','elephant'] 如何有效地将列表转换为布尔元素数组,其中每个索引表示列表中是否存在给定的动物(10^n只动物)?也就是说,如果cat存在,则索引x为真,如果大象存在,则索引y为真,但剩余的10^n均为假 是否有一个numpy或scipy内置程序可以实现这种理解?好吧,这里有几种方法可以实现这一点: 地图 使用Python的内置函数,您可以轻松地做到这一点 animal_list = ['cat', 'elephant'] your_list = ['do

假设我的清单如下:
['cat','elephant']

如何有效地将列表转换为布尔元素数组,其中每个索引表示列表中是否存在给定的动物(10^n只动物)?也就是说,如果cat存在,则索引
x
为真,如果大象存在,则索引
y
为真,但剩余的10^n均为假


是否有一个numpy或scipy内置程序可以实现这种理解?

好吧,这里有几种方法可以实现这一点:

地图 使用Python的内置函数,您可以轻松地做到这一点

animal_list = ['cat', 'elephant']
your_list = ['dog', 'horse', 'cat', 'shark', 'cancer', 'elephant']
res = map(lambda item: item in animal_list, your_list)
print res
输出

[False, False, True, False, False, True]
列表理解 您可能更喜欢使用
列表理解

res = [ True if item in animal_list else False for item in your_list ]
努比1d 如果出于紧凑的原因,您愿意使用
NumPy
的数组,则可以执行以下操作:

animal_list = numpy.array(['cat', 'elephant'])
your_list = numpy.array(['dog', 'horse', 'cat', 'shark', 'cancer', 'elephant'])
mask = np.in1d(your_list, animal_list)
print mask[1]
有关更多信息,请阅读

注意:如果在此场景中
动物列表
恰好比
您的列表
长,那么
numpy.in1d
方法将
动物列表
作为“目标”列表,这意味着在不同的实例中,生成的数组将无法保证一致的维度。[归功于]

土法 只需在
您的\u列表上循环

res = []
for animal in your_list:
    res.append(animal in animal_list)

好吧,这里有几种方法可以实现这一点:

地图 使用Python的内置函数,您可以轻松地做到这一点

animal_list = ['cat', 'elephant']
your_list = ['dog', 'horse', 'cat', 'shark', 'cancer', 'elephant']
res = map(lambda item: item in animal_list, your_list)
print res
输出

[False, False, True, False, False, True]
列表理解 您可能更喜欢使用
列表理解

res = [ True if item in animal_list else False for item in your_list ]
努比1d 如果出于紧凑的原因,您愿意使用
NumPy
的数组,则可以执行以下操作:

animal_list = numpy.array(['cat', 'elephant'])
your_list = numpy.array(['dog', 'horse', 'cat', 'shark', 'cancer', 'elephant'])
mask = np.in1d(your_list, animal_list)
print mask[1]
有关更多信息,请阅读

注意:如果在此场景中
动物列表
恰好比
您的列表
长,那么
numpy.in1d
方法将
动物列表
作为“目标”列表,这意味着在不同的实例中,生成的数组将无法保证一致的维度。[归功于]

土法 只需在
您的\u列表上循环

res = []
for animal in your_list:
    res.append(animal in animal_list)
这:

印刷品:

[ True  True False]
这:

印刷品:

[ True  True False]

谷歌
numpy.in1d
。谷歌
numpy.in1d
。完美,这正好回答了我的问题。作为一个快速的后续问题:没有办法避免定义
您的\u列表
,对吗?因为
res
的维度需要预先定义。是的,这是正确的。但是,如果您提供更多的详细信息,我们可能会有更好的解决方案。对
map
方法正确投票–如果在这种情况下
animal\u list
恰好比
your\u list
长,那么numpy.inad方法会产生
animal\u list
作为“目标”列表,这意味着,在不同的实例中,生成的数组不能保证一致的维度。很好,这正好回答了我的问题。作为一个快速的后续问题:没有办法避免定义
您的\u列表
,对吗?因为
res
的维度需要预先定义。是的,这是正确的。但是,如果您提供更多的详细信息,我们可能会有更好的解决方案。对
map
方法正确投票–如果在这种情况下
animal\u list
恰好比
your\u list
长,那么numpy.inad方法会产生
animal\u list
作为“目标”列表,这意味着,在不同的实例中,生成的数组将无法保证一致的维度。