我有以下列表:
data = [0, 1, 0, 1, 0, 1]
我想写一个循环,它会给我以下列表:
[0]
[0, 1]
[0, 1, 0]
[0, 1, 0, 1]
[0, 1, 0, 1, 0]
也就是说,我想要总共五个列表(比原始列表的长度少一个)。但是,我需要代码足够灵活,无论列表有多长,它都会输出第一个元素,然后输出前两个元素,依此类推,作为单个列表,直到达到原始列表的长度减去一个
如何编写代码来执行此操作?还有比明显的for循环更优雅的东西吗?
答案 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])