擅长:python、mysql、java
<p>我可以使用<code>Counter</code>:</p>
<pre><code>s = 'Spot is a brown dog. Spot has brown hair. The hair of Spot is brown.'
words_we_want = ("Spot","brown","hair")
from collections import Counter
data = Counter(s.split())
print (sum(data[word] for word in words_we_want))
</code></pre>
<p>请注意,由于<code>'brown.'</code>和<code>'brown'</code>是单独的计数器项,因此这将被1计为不足。</p>
<p>一个稍微不那么优雅的解决方案,它不会在标点符号上出错,它使用正则表达式:</p>
<pre><code>>>> len(re.findall('Spot|brown|hair','Spot is a brown dog. Spot has brown hair. The hair of Spot is brown.'))
8
</code></pre>
<p>您可以通过简单的</p>
<pre><code>'|'.join(re.escape(x) for x in words_we_want)
</code></pre>
<p>这些解决方案的好处是,与gnibbler的解决方案相比,它们具有更好的算法复杂性。当然,在真实世界数据上表现更好的仍然需要用OP来衡量(因为OP是唯一一个有真实世界数据的对象)</p>