擅长:python、mysql、java
<p>您在这里得到了一些聪明的答案,但我想建议,最明显的方法就是使用内置的切片索引。像这样:</p>
<pre><code>def gen_k_slices(seq, k):
for i in range(len(seq) - k + 1):
yield seq[i:i+k]
</code></pre>
<p>下面是一个小试驾:</p>
<pre><code>TEST = [1, 2, 3, 4, 5, 6]
for k in range(8):
print("k={} -> {}".format(k, list(gen_k_slices(TEST, k))))
</code></pre>
<p>及其输出:</p>
<pre><code>k=0 -> [[], [], [], [], [], [], []]
k=1 -> [[1], [2], [3], [4], [5], [6]]
k=2 -> [[1, 2], [2, 3], [3, 4], [4, 5], [5, 6]]
k=3 -> [[1, 2, 3], [2, 3, 4], [3, 4, 5], [4, 5, 6]]
k=4 -> [[1, 2, 3, 4], [2, 3, 4, 5], [3, 4, 5, 6]]
k=5 -> [[1, 2, 3, 4, 5], [2, 3, 4, 5, 6]]
k=6 -> [[1, 2, 3, 4, 5, 6]]
k=7 -> []
</code></pre>
<p>我也不喜欢k=0的结果;-)</p>