我有一个非常大的字符串列表,如下所示:
list_strings = ['storm', 'squall', 'overcloud',...,'cloud_up', 'cloud_over', 'plague', 'blight', 'fog_up', 'haze']
和一个非常大的列表列表如下:
lis_of_lis = [['the storm was good blight'],['this is overcloud'],...,[there was a plague stormicide]]
如何在list_strings
的每个子列表中返回lis_of_lis
中显示的所有字词的计数列表。例如,对于上面的示例,这将是所需的输出:[2,1,1]
例如:
['storm', 'squall', 'overcloud',...,'cloud_up', 'cloud_over', 'plague', 'blight', 'fog_up', 'haze']
['the storm was good blight']
计数为2,因为storm
和blight
出现在第一个子列表中(lis_of_lis)
['storm', 'squall', 'overcloud',...,'cloud_up', 'cloud_over', 'plague', 'blight', 'fog_up', 'haze']
['this is overcloud stormicide']
计数为1
,因为overcloud
出现在第一个子列表中(lis_of_lis)
因为stormicide没有出现在第一个列表中
['storm', 'squall', 'overcloud',...,'cloud_up', 'cloud_over', 'plague', 'blight', 'fog_up', 'haze']
[there was a plague]
计数为1
,因为plague
出现在第一个子列表中(lis_of_lis)
因此是所需的输出[2,1,1]
所有答案的问题在于计算单词中的所有子字符串而不是完整单词
答案 0 :(得分:1)
result = []
for sentence in lis_of_lis:
result.append(0)
for word in list_strings:
if word in sentence[0]:
result[-1]+=1
print(result)
是
的长版本result = [sum(1 for word in list_strings if word in sentence[0]) for sentence in lis_of_lis]
这将为您的示例返回[2,2,1]。
如果您只想要整个单词,请在单词/句子之前和之后添加空格:
result = []
for sentence in lis_of_lis:
result.append(0)
for word in list_strings:
if ' '+word+' ' in ' '+sentence[0]+' ':
result[-1]+=1
print(result)
或简短版本:
result = [sum(1 for word in list_strings if ' '+word+' ' in ' '+sentence[0]+' ') for sentence in lis_of_lis]
这将为您的示例返回[2,1,1]。
答案 1 :(得分:1)
您可以在列表理解中使用sum
函数:
[sum(1 for i in list_strings if i in sub[0]) for sub in lis_of_lis]
答案 2 :(得分:0)
这会创建一个字典,其中list_string中的单词作为键,值从0开始。然后迭代lis_of_lis,将短语拆分为单词列表,遍历单词,并检查它们是否是在字典里。如果是,则将1添加到相应的值。
word_count = dict()
for word in list_string:
word_count[word] = 0
for phrase in lis_of_lis:
words_in_phrase = phrase.split()
for word in words_in_phrase:
if word in word_count:
word_count[word] += 1
这将创建一个字典,其中的单词为键,频率为值。我将留给您从该数据结构中获取正确的输出。