从列表生成嵌套列表

时间:2017-08-17 14:19:17

标签: python

我有以下列表:

data = [0, 1, 0, 1, 0, 1]

我想写一个循环,它会给我以下列表:

[0]
[0, 1]
[0, 1, 0]
[0, 1, 0, 1]
[0, 1, 0, 1, 0]

也就是说,我想要总共五个列表(比原始列表的长度少一个)。但是,我需要代码足够灵活,无论列表有多长,它都会输出第一个元素,然后输出前两个元素,依此类推,作为单个列表,直到达到原始列表的长度减去一个

如何编写代码来执行此操作?还有比明显的for循环更优雅的东西吗?

4 个答案:

答案 0 :(得分:5)

您可以使用列表理解。简单易行。

In [652]: [list_[:i] for i in range(1, len(list_))]
Out[652]: [[0], [0, 1], [0, 1, 0], [0, 1, 0, 1], [0, 1, 0, 1, 0]]

这是for循环的光滑等效物做同样的事情:

In [654]: output = []
     ...: for i in range(1, len(list_)):
     ...:     output.append(list_[:i]) 
     ...: print(output)
     ...: 
[[0], [0, 1], [0, 1, 0], [0, 1, 0, 1], [0, 1, 0, 1, 0]]

答案 1 :(得分:2)

只是一个愚蠢的选择... ...

>>> list(itertools.accumulate([x] for x in data))[:-1]
[[0], [0, 1], [0, 1, 0], [0, 1, 0, 1], [0, 1, 0, 1, 0]]

答案 2 :(得分:0)

以下是一种方法:

my_list = [0, 1, 0, 1, 0, 1]

def one_by_one(l):
    previous = []
    total = len(l) - 1
    for i, element in enumerate(l):
        if i != total:
            previous.append(element)
            print previous

one_by_one(my_list)

这里我创建了一个函数one_by_one,它迭代它作为参数的列表。在迭代期间,它将每个列表值附加到一个空列表并打印到目前为止的内容 - 仅当元素不是最后一个时。输出正是您想要的:

[0]
[0, 1]
[0, 1, 0]
[0, 1, 0, 1]
[0, 1, 0, 1, 0]
[0, 1, 0, 1, 0, 1]

此功能只打印输出。如果您希望保留这些列表供以后使用,那么这将采用略有不同的方法。希望这有帮助!

答案 3 :(得分:-1)

for i,x in enumerate(list):
    print (list[:i])