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
作为“目标”列表,这意味着,在不同的实例中,生成的数组将无法保证一致的维度。