擅长:python、mysql、java
<p>您需要如何使用输出?如果您只需要遍历它,那么最好创建一个iterable,它将生成您的组:</p>
<pre><code>def split_by(sequence, length):
iterable = iter(sequence)
def yield_length():
for i in xrange(length):
yield iterable.next()
while True:
res = list(yield_length())
if not res:
return
yield res
</code></pre>
<p>用法示例:</p>
<pre><code>>>> alist = range(10)
>>> list(split_by(alist, 3))
[[0, 1, 2], [3, 4, 5], [6, 7, 8], [9]]
</code></pre>
<p>如果您只是在结果上循环,则这比尝试一次在内存中构造整个列表占用的内存要少得多,因为它一次只构造一个子集:</p>
<pre><code>>>> for subset in split_by(alist, 3):
... print subset
...
[0, 1, 2]
[3, 4, 5]
[6, 7, 8]
[9]
</code></pre>