根据第二个列表将Python列表拆分为自定义块大小

时间:2016-07-21 14:53:06

标签: python list slice

我正在寻找一种将列表拆分为预定义切片的方法:

a = list(range(1, 1001)) # Added list() 
b = [200, 500, 300]

列表a应该切成len(b)个子列表,其中包含a的前200个元素,以下500个元素和最后300个元素。可以安全地假设sum(b) == len(a)

这是否有共同的功能?

3 个答案:

答案 0 :(得分:5)

从列表中创建一个迭代器(如果它不是已经存在的那个),并且从n中的每个next的迭代器中获取nb次}。

>>> a = range(1, 1001)
>>> b = [200, 500, 300]
>>> a_iter = iter(a)
>>> [[next(a_iter) for _ in range(n)] for n in b]
[[1,
  2,
  ...
  199,
  200],
 [201,
  ...
  700],
 [701,
  702,
  ...
  999,
  1000]]

答案 1 :(得分:3)

您还可以使用itertools.islice在预定义的块中使用a的迭代器:

>>> from itertools import islice
>>> b = [200, 500, 300]
>>> a = range(1, 1001)
>>> it  = iter(a)
>>> [list(islice(it, i)) for i in b]

答案 2 :(得分:3)

itertools.islice

from itertools import islice

a = range(1, 1001)
b = [200, 500, 300]

c = iter(a)
results = [list(islice(c, length)) for length in b]

islice的行为类似于slice,除了slice接受序列并返回序列,而islice接受iterable并返回iterable。

迭代器是“一次性的” - 一旦你从中提取元素,它就不再存在,下一个元素成为新的第一个元素。