擅长:python、mysql、java
<p>你可以将列表压缩,使其自身移动1。你知道吗</p>
<pre><code>>>> lst = [1,2,3,4,5]
>>> zip(lst, lst[1:])
[(1, 2), (2, 3), (3, 4), (4, 5)]
</code></pre>
<p>这假设列表是有序的。如果不是,那么您可以先对它排序,然后过滤它以排除不匹配项(如果这很重要的话,可能包括原始列表中的索引)。如果是一个更复杂的整数列表,这应该可以:</p>
<pre><code>>>> lst = [99,12,13,44,15,16,45,200]
>>> lst.sort()
>>> [(x,y) for (x,y) in zip(lst, lst[1:]) if x + 1 == y]
[(12, 13), (15, 16), (44, 45)]
</code></pre>
<p>以下是使用函数的等效方法。使用来自<code>itertools</code>的<code>izip</code>可以确保在查找与filter函数匹配的项时,只对列表进行一次迭代:</p>
<pre><code>>>> from itertools import izip
>>> lst = [99,12,13,44,15,16,45,200]
>>> lst.sort()
>>> filter(lambda (x,y): x+1==y, izip(lst, lst[1:]))
[(12, 13), (15, 16), (44, 45)]
</code></pre>
<p>同样的方法也可以用于理解,但我个人更喜欢使用函数。你知道吗</p>