Python:检查列表列表中的每个列表中是否有值

时间:2017-04-06 14:13:46

标签: python

我有一个问题,是否存在快速方法来检查列表中的每个值是否都在列表列表的每个子列表中。

word = ['Elevator','Cats Allowed','Hardwood Floors',...] # length could be 100. No duplicate exists in this list.
features =[['Hardwood Floors','Doorman',...],['Pre-War', 'Dogs Allowed', 'Cats Allowed',...],[...]] # a list of lists;length could be ~150,000

我所知道的是我可以对单词和特征进行双循环迭代。只是想知道是否有更快的方法?因为我发现双循环在我的情况下非常慢。

我期望的是:

for each_word in word:
    each_word in features? 

我希望对word进行每次迭代,它会为each_word返回一个boolean向量(即,如果each_word位于每个要素子列表中,则返回所有true的向量[true,true,....,true] ;如果each_word不在任何子列表中,则返回所有False的向量;否则返回True或False的混合向量。

谢谢

2 个答案:

答案 0 :(得分:0)

如果您想知道所有单词是否都在任何列表中:

 set(words).issubset(set([item for sublist in features for item in sublist]))

编辑:好的,如果你想知道每个单词是否在列表中,我会这样做:

s = set([item for sublist in features for item in sublist]
[word in s for word in words]

答案 1 :(得分:0)

使用集合肯定会像Roelant建议的那样加速你的代码,并且你可以用列表理解来使它变得简洁明了:

features_set = list(map(set, features))
for word in words:
    vector = [(word in subset) for subset in features_set]
    # do something with the vector