根据第二个列表将 Python 列表拆分为自定义块大小
Split Python list into custom chunk size based on second list
我正在寻找一种将列表拆分为预定义切片的方法:
a = list(range(1, 1001)) # Added list()
b = [200, 500, 300]
列表 a
应该被分成 len(b)
个子列表,其中包含 a 的前 200 个元素、接下来的 500 个元素和最后的 300 个元素。假设 sum(b) == len(a)
是安全的。
这个有通用函数吗?
从列表中创建一个迭代器(如果它还不是一个)并为 [=14= 中的每个 n
从迭代器中获取 n
乘以 next
元素].
>>> 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]]
您还可以使用 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]
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 采用序列和 returns 序列,而 islice
采用 iterable 和 returns iterable。
迭代器是 "disposable" -- 一旦你从中提取元素,它就不再存在,下一个元素成为新的第一个元素。
我正在寻找一种将列表拆分为预定义切片的方法:
a = list(range(1, 1001)) # Added list()
b = [200, 500, 300]
列表 a
应该被分成 len(b)
个子列表,其中包含 a 的前 200 个元素、接下来的 500 个元素和最后的 300 个元素。假设 sum(b) == len(a)
是安全的。
这个有通用函数吗?
从列表中创建一个迭代器(如果它还不是一个)并为 [=14= 中的每个 n
从迭代器中获取 n
乘以 next
元素].
>>> 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]]
您还可以使用 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]
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 采用序列和 returns 序列,而 islice
采用 iterable 和 returns iterable。
迭代器是 "disposable" -- 一旦你从中提取元素,它就不再存在,下一个元素成为新的第一个元素。