<p>{a>在任何地方都能找到匹配的数字,那么</p>
<pre><code>if '666' in '1234666321':
print("It's a devil's number")
</code></pre>
<p>但是,你说<code>666</code>必须是一个“孤独”<code>666</code>,也就是说,正好三个<code>6</code>并排,不多,不少。不是两个,也不是四个。五个{<cd4>}都出来了。在这种情况下,我将使用<a href="https://stackoverflow.com/a/38769806/344286">tobias_k's regex</a>。在</p>
<p>不过,如果你对regex怀有强烈的仇恨,你可以使用<code>string.partition</code>来实现它:</p>
^{pr2}$
<p>表演情况如下:</p>
<pre><code>>>> x = '''
... import re
... numbas = ['666', '6', '123666', '12366', '66123', '666123', '666666', '6666', '6'*9, '66661236666']
...
... def devil(x):
... return re.search(r"(?:^|[^6])(666)(?:[^6]|$)", x) is not None
... '''
>>> import timeit
>>> timeit.timeit('[devil(num) for num in numbas]', setup=x)
13.822128501953557
>>> x = '''
... numbas = ['666', '6', '123666', '12366', '66123', '666123', '666666', '6666', '6'*9, '6666123
666']
... def has_devils_number(num):
... start, mid, end = num.partition('666')
... if not mid:
... return False
... else:
... if end == '666':
... return False
... elif start.endswith('6') or end.startswith('6'):
... return has_devils_number(start) or has_devils_number(end)
... return True
... '''
>>> timeit.timeit('[has_devils_number(num) for num in numbas]', setup=x)
9.843224229989573
</code></pre>
<p>我和你一样惊讶。在</p>