Python:检查列表列表中的每个列表中是否有值
我有一个问题,关于是否存在一种快速方法来检查列表中的每个值是否在列表的每个子列表中Python:检查列表列表中的每个列表中是否有值,python,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',...],[
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?
我希望对于每个单词的每次迭代,它都会为每个单词返回一个布尔向量(即,如果每个单词都在每个特征子列表中,它会返回一个全真向量[true,true,…,true];如果每个单词不在任何子列表中,它会返回全假向量;否则,如果返回一个真或假混合向量
如果您想知道所有单词是否都在以下列表中,请向您表示感谢:
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]
正如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
如果您想让这个过程更快,请使用
集合
而不是列表
。您是否对单词的确切子列表感兴趣,或者您是否愿意知道单词是否是其中的任何一个子列表或所有子列表?A最好有匹配值和非匹配值,否则它就太宽了,正如iafisher在问题中所指出的。例如,您的单词是a、b、c…当您的其他列表包含真实单词时。因此,请提供一个小的单词列表和一个小的其他单词列表,以及预期的结果,可能是通过您似乎能够编写的低效代码获得的。@iafisher,我只感兴趣的是该列表的每个子列表中是否有一个单词。对于每个单词,t“布尔向量对我来说很重要。”让·弗朗索瓦·法布。我刚刚编辑了一点,希望现在更清楚。