说我的清单如下:
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内置可以实现这种理解?
答案 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
的数组,那么您可以这样做:
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)