-1

我有以下问题。我有一个类似的列表:

>>> l = list(range(20))
>>> l
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
>>> # What I want:
>>> [[0, 1, 2, 3], [3, 4, 5, 6], [6, 7, 8, 9] , ...]

如何以最 Pythonic 的方式将我的列表分成长度为 4 的 k 个片段?我觉得我在这里错过了一些明显的东西。我完全了解如何将列表拆分为大小均匀的块?但还是没有头绪...

提前致谢!

4

3 回答 3

2

您已发布链接的问题答案的直接副本。唯一的变化是xrangen到的步骤n - 1

def chunks(l, n):
    for i in xrange(0, len(l), n - 1):
        yield l[i:i + n]


list(chunks(range(20), 4))
[[0, 1, 2, 3], [3, 4, 5, 6], [6, 7, 8, 9], [9, 10, 11, 12], [12, 13, 14, 15], [15, 16, 17, 18], [18, 19]]
于 2013-10-13T20:36:46.993 回答
0
zip(*[iter(list(range(20)))]*4)
于 2013-10-13T20:32:35.747 回答
0
a = range(20)
b = [a[i:i+4] for i in xrange(0, len(a), 4)]
print b
[[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11], [12, 13, 14, 15], [16, 17, 18, 19]]
于 2013-10-13T20:36:38.903 回答