擅长:python、mysql、java
<p><strong>提供替代解决方案:</strong></p>
<p>我将使用<code>overlapping</code>函数。我想有些人把它叫做<code>window</code>函数(?)。你知道吗</p>
<p>像这样:</p>
<pre><code>from collections import deque
def overlapping(seq, n):
result = deque(seq[:n], maxlen=n)
yield tuple(result)
for x in seq[n:]:
result.append(x)
yield tuple(result)
</code></pre>
<p>这将给你:</p>
<pre><code>>>> list(overlapping('abcdefg', 3))
[('a', 'b', 'c'), ('b', 'c', 'd'), ('c', 'd', 'e'), ('d', 'e', 'f'), ('e', 'f', 'g')]
</code></pre>
<p><a href="https://github.com/norvig/pytudes/blob/master/ipynb/Advent%202017.ipynb" rel="nofollow noreferrer">Peter Norvig has a lovely implementation of this.</a></p>
<p>用它做你想做的事情相当简单:</p>
<pre><code>def increasing_lengths(n):
seq = list(range(1, n + 1))
for i in range(1, n):
yield list(overlapping(seq, i))
>>> list(increasing_lengths(4))
[[(1,), (2,), (3,), (4,)], [(1, 2), (2, 3), (3, 4)], [(1, 2, 3), (2, 3, 4)]]
</code></pre>
<p>您也可以不用使用<code>collections</code>来实现这一点,但它不会这么短。你知道吗</p>
<p>给你,我的两分钱。你知道吗</p>