我就是这样做的。迭代,但在列表理解中。注意类型是混合的;这可能是所希望的,也可能不是所希望的。
def sublist(seq, length):
return [seq[i:i + length] for i in xrange(0, len(seq), length)]
Usage:
>>> sublist((1, 2, 3, 4, 5), 1)
[(1,), (2,), (3,), (4,), (5,)]
>>> sublist([1, 2, 3, 4, 5], 2)
[[1, 2], [3, 4], [5]]
>>> sublist('12345', 3)
['123', '45']
>>> sublist([1, 2, 3, 4, 5], 73)
[[1, 2, 3, 4, 5]]
>>> sublist((1, 2, 3, 4, 5), 0)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in sublist
ValueError: xrange() arg 3 must not be zero
当然,你可以很容易地让它产生一个tuple
如果你愿意的话,也可以替换列表理解[...]
with tuple(...)
。你也可以更换seq[i:i + length]
with tuple(seq[i:i + length])
or list(seq[i:i + length])
使其返回固定类型。