擅长:python、mysql、java
<p>这个:为更快的成员检查创建一个列表集;然后为列表中的每个<code>i</code>短路检查该集中是否存在<code>i + 1</code>(我迭代列表而不是新创建的集,因为它应该稍微快一点)。一旦证明任何<code>i + 1</code>也在列表中,函数就会退出,返回值为<code>True</code>,否则返回值为<code>False</code>。你知道吗</p>
<pre><code>def has_n_and_n_plus_1(lst):
lset = set(lst)
return any(i + 1 in lset for i in lst)
</code></pre>
<p>测试:</p>
<pre><code>>>> has_n_and_n_plus_1([6,2,7,11,42])
True
>>> has_n_and_n_plus_1([6,2,9,11,42])
False
</code></pre>
<hr/>
<p>一篮子脑筋急转弯一:</p>
<pre><code>from operator import sub
from itertools import starmap, tee
a, b = tee(sorted(lst))
next(b, None)
exists = 1 in starmap(sub, zip(b, a))
</code></pre>
<p>这段代码的作用是:按递增顺序对列表排序;然后对<code>a, b = lst[i], lst[i + 1]</code>进行成对迭代,然后将每个<code>b, a</code>星图映射到<code>sub</code>操作符中,得到<code>b - a</code>;然后用<code>in</code>操作符检查结果迭代器是否包含任何<code>1</code>。你知道吗</p>