将列表基于任意数量的索引分成多个部分的最佳方法是什么?例如给出下面的代码
indexes = [5, 12, 17] list = range(20)
返回这样的东西
part1 = list[:5] part2 = list[5:12] part3 = list[12:17] part4 = list[17:]
如果没有索引,则应返回整个列表。
这是我能想到的最简单,最pythonic的解决方案:
def partition(alist, indices): return [alist[i:j] for i, j in zip([0]+indices, indices+[None])]
如果输入很大,则迭代器解决方案应该更方便:
from itertools import izip, chain def partition(alist, indices): pairs = izip(chain([0], indices), chain(indices, [None])) return (alist[i:j] for i, j in pairs)
当然,这是一个非常懒惰的家伙解决方案(如果您不介意获取数组而不是列表,但是无论如何,您始终可以将它们还原为列表):
import numpy partition = numpy.split