计算列表或数组中感兴趣的单词



我有以下场景:

import pandas as pd
import numpy as np
stuff = ['Elon Musk', 'elon musk', 'elon Musk', 'Elon Musk is awesome', "Who doesn't love Elon Musk"]

我想数一下埃隆·马斯克这个名字在"东西"列表的各个方面显示的次数。大写或小写都很重要。预期的结果是,它将返回5的值计数(因为Elon Musk不区分大小写,出现在列表的各个方面

这样的东西应该能在中工作

l = ['Elon Musk', 'elon musk', 'elon Musk', 'Elon Musk is awesome', "Who doesn't love Elon Musk"]
sum(1 for x in l if 'elon musk' in x.lower())

输出

5

编辑:

如果单词可能重复,您可以使用regex

import re
l = ['Elon Musk', 'elon musk', 'elon Musk', 'Elon Musk is awesome', "Who doesn't love Elon Musk loving Elon Musk"]
sum(len(re.findall('elon musk', x.lower())) for x in l)

输出

6

要搜索列表,可以执行以下操作:

results = [value for value in values if search.lower() in value.lower()]

为了将其与您的示例相匹配,您可以执行

results = [result for result in stuff if 'elon musk' in result.lower()]

然后,您可以使用len(results)来获得结果的数量。

实际上,最快的方法之一是使用列表理解(而不是迭代器(:

>>> len([x for x in stuff if 'elon musk' in x.lower()])
5
# or
>>> sum(['elon musk' in x.lower() for x in stuff])
5

当您可以使用列表理解本身时,不要使用sum('elon musk' in x.lower() for x in stuff)或任何sum(iterator)。它也起作用,但实际上速度较慢(在这么小的列表中有一点点(。

假设你想计算同一句话中的多次出现次数(如果有的话(,你可以使用str.count:

stuff = ['Elon Musk', 'elon musk', 'elon Musk', 'Elon Musk is awesome', "Who doesn't love Elon Musk"]
elon_musk_counts = sum(s.lower().count('elon musk') for s in stuff)