布尔数组的元素列表

时间:2015-05-25 21:54:50

标签: python arrays numpy data-structures scipy

说我的清单如下: x

如何有效地将我的列表转换为布尔元素数组,其中每个索引表示给定的动物(10 ^ n只动物)是否存在于我的列表中?也就是说,如果cat存在,则索引y为真,如果大象存在,则索引CGSize rect=[view systemLayoutSizeFittingSize:CGSizeMake(0, 0)]; view.frame=CGRectMake(0, 0, rect.width, rect.height); 为真,但剩余的10 ^ n都为假。

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

3 个答案:

答案 0 :(得分:3)

嗯,有以下几种方法可以实现这一目标:

地图

使用Python的map内置函数,您可以轻松完成。

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]

列表理解

您可能更喜欢使用list comprehension

res = [ True if item in animal_list else False for item in your_list ]

NumPy的in1d

如果您愿意出于紧凑的原因使用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]

有关详情,请参阅the manual

注意:如果animal_list在这种情况下恰好超过your_list,那么numpy.in1d方法会产生animal_list作为'目标'list,这意味着在不同的实例中,生成的数组不会保证一致的维度。 [信用转到XLXMXNT]

原生方式

只需循环your_list

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

答案 1 :(得分:1)

此:

import numpy as np

animals = np.array(['cat','elephant', 'dog'])
wanted = np.array(['cat','elephant'])
print(np.in1d(animals, wanted))

打印:

[ True  True False]

答案 2 :(得分:1)

for x in range(largerlist):
    if largerlist[x] in shorterlist:
        booleanlist.append(True)
        continue
    booleanlist.append(False)