本问题已经有最佳答案,请猛点这里访问。
我正在寻找一种快速,干净,pythonic的方式将列表分为正好n个几乎相等的分区。
partition([1,2,3,4,5],5)->[[1],[2],[3],[4],[5]]
partition([1,2,3,4,5],2)->[[1,2],[3,4,5]] (or [[1,2,3],[4,5]])
partition([1,2,3,4,5],3)->[[1,2],[3,4],[5]] (there are other ways to slice this one too)
在这里,对列表切片的迭代有很多个答案,它们与我想要的非常接近,除了它们专注于列表的大小,而且我关心列表的数量(其中一些还填充了None)。 显然,这些都是微不足道的转换,但是我正在寻找最佳实践。
同样,人们在这里指出了很好的解决方案如何将列表分成大小均匀的块? 对于一个非常类似的问题,但是我对分区的数量而不是特定大小更感兴趣,只要它在1之内即可。同样,这是微不足道的,但是我正在寻找一种最佳实践。
在您的示例中,仅采取不同的做法,仅当[[1,3,5],[2,4]]是可接受的分区时才有效。
def partition ( lst, n ):
return [ lst[i::n] for i in xrange(n) ]
这满足@Daniel Stutzbach的示例中提到的示例:
partition(range(105),10)
# [[0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100],
# [1, 11, 21, 31, 41, 51, 61, 71, 81, 91, 101],
# [2, 12, 22, 32, 42, 52, 62, 72, 82, 92, 102],
# [3, 13, 23, 33, 43, 53, 63, 73, 83, 93, 103],
# [4, 14, 24, 34, 44, 54, 64, 74, 84, 94, 104],
# [5, 15, 25, 35, 45, 55, 65, 75, 85, 95],
# [6, 16, 26, 36, 46, 56, 66, 76, 86, 96],