我有以下场景:
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)