如何将列表分成大小相等的块?

新手上路,请多包涵
阅读 1k
2 个回答

这是一个生成大小均匀的块的生成器:

 def chunks(lst, n):
    """Yield successive n-sized chunks from lst."""
    for i in range(0, len(lst), n):
        yield lst[i:i + n]

 import pprint
pprint.pprint(list(chunks(range(10, 75), 10)))
[[10, 11, 12, 13, 14, 15, 16, 17, 18, 19],
 [20, 21, 22, 23, 24, 25, 26, 27, 28, 29],
 [30, 31, 32, 33, 34, 35, 36, 37, 38, 39],
 [40, 41, 42, 43, 44, 45, 46, 47, 48, 49],
 [50, 51, 52, 53, 54, 55, 56, 57, 58, 59],
 [60, 61, 62, 63, 64, 65, 66, 67, 68, 69],
 [70, 71, 72, 73, 74]]

对于 Python 2,使用 xrange 而不是 range

 def chunks(lst, n):
    """Yield successive n-sized chunks from lst."""
    for i in xrange(0, len(lst), n):
        yield lst[i:i + n]


下面是一个列表理解单行。不过,上面的方法更可取,因为使用命名函数会使代码更容易理解。对于 Python 3:

 [lst[i:i + n] for i in range(0, len(lst), n)]

对于 Python 2:

 [lst[i:i + n] for i in xrange(0, len(lst), n)]

原文由 Ned Batchelder 发布,翻译遵循 CC BY-SA 4.0 许可协议

超级简单的东西:

 def chunks(xs, n):
    n = max(1, n)
    return (xs[i:i+n] for i in range(0, len(xs), n))

对于 Python 2,使用 xrange() 而不是 range()

原文由 oremj 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题