如何根据长度在python中创建一维列表中的二维列表

时间:2017-05-09 11:31:28

标签: python python-2.7 list split

我有一个列表[1,2,3,4,5,6,7,8,9]。我想根据a创建2D列表  长度。 假设我的长度为3,2,4 因此,结果列表必须与[[1,2,3],[4,5],[6,7,8,9]]类似。 任何人都可以提出一些方法来实现这一目标吗?

2 个答案:

答案 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]]