擅长:python、mysql、java
<p>你可以用线切片。调整代码的一种方法:</p>
<pre><code>a = 'dfjgnsdfgnbobobeob bob'
counter = 0
value = 'bob'
chars = len(value)
for i in range(len(a) - chars + 1):
if a[i: i + chars] == value:
counter += 1
</code></pre>
<p>通过<code>sum</code>和生成器表达式,可以用更简洁的方式来编写:</p>
<pre><code>counter = sum(a[i: i + chars] == value for i in range(len(a) - chars + 1))
</code></pre>
<p>这是因为<code>bool</code>是Python中<code>int</code>的一个子类,即<code>True</code>/<code>False</code>值分别被认为是<code>1</code>和<code>0</code>。你知道吗</p>
<p>注意<code>str.count</code>在这里不起作用,因为它<a href="https://docs.python.org/3.7/library/stdtypes.html#str.count" rel="nofollow noreferrer">only counts <em>non-overlapping</em> matches</a>。如果允许内置,您可以使用<a href="https://docs.python.org/3/library/stdtypes.html#str.find" rel="nofollow noreferrer">^{<cd9>}</a>。你知道吗</p>