我有一个列表[1,2,3,4,5,6,7,8,9]
。我想根据a创建2D列表
长度。
假设我的长度为3,2,4
因此,结果列表必须与[[1,2,3],[4,5],[6,7,8,9]]
类似。
任何人都可以提出一些方法来实现这一目标吗?
答案 0 :(得分:1)
您可以这样做:
def subdiv(sliceable,lengths):
idx = 0
for length in lengths:
yield sliceable[idx:idx+length]
idx += length
然后你可以这样称呼它:
>>> list(subdiv([1,2,3,4,5,6,7,8,9],[3,2,4]))
[[1, 2, 3], [4, 5], [6, 7, 8, 9]]
此方法适用于支持切片的所有内容。例如元组:
>>> list(subdiv((1,2,3,4,5,6,7,8,9),[3,2,4]))
[(1, 2, 3), (4, 5), (6, 7, 8, 9)]
最后lengths
可以来自任何类型的可迭代(列表,元组,生成器等)。
答案 1 :(得分:1)
您只需通过itertools.islice
:
>>> from itertools import islice
>>> lst = [1,2,3,4,5,6,7,8,9]
>>> it = iter(lst)
>>> [list(islice(it,i)) for i in [3,2,4]]
[[1, 2, 3], [4, 5], [6, 7, 8, 9]]