Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中,从列表的开头开始逐步迭代较大的片_Python_List - Fatal编程技术网

在python中,从列表的开头开始逐步迭代较大的片

在python中,从列表的开头开始逐步迭代较大的片,python,list,Python,List,考虑下面的代码,它打印列表的前n个元素,从n=1..n 我正在寻找这段代码的foreach风格版本,以避免稍微混淆的range1,lenlst+1。差不多 for sublist in ___(lst): print(sublist) 我确信有一种很好的方法可以用itertools或其他什么东西来实现这一点,但我什么也找不到。我认为没有一种适合你的方式。你的方式已经很好了。我可以想到的另一种方法是通过一次添加一个项目来构建它们 prefix = [] for x in lst:

考虑下面的代码,它打印列表的前n个元素,从n=1..n

我正在寻找这段代码的foreach风格版本,以避免稍微混淆的range1,lenlst+1。差不多

for sublist in ___(lst):
    print(sublist)

我确信有一种很好的方法可以用itertools或其他什么东西来实现这一点,但我什么也找不到。

我认为没有一种适合你的方式。你的方式已经很好了。我可以想到的另一种方法是通过一次添加一个项目来构建它们

prefix = []
for x in lst:
    prefix.append(x)
    print(prefix)

如果您要操作索引和下标,那么您必须习惯python中范围的外观,这通常不是非常python式的

大多数情况下,有一种方法可以处理列表,而无需运行索引

这不是一个很好的例子,但它说明了可以采取的方法:

lst = [1,2,3,4,5]
def subLists(arr):
    if not arr: return
    for sl in subLists(arr[:-1]): yield sl
    yield arr
输出:

for sublist in subLists(lst): 
    print(sublist)

[1]
[1, 2]
[1, 2, 3]
[1, 2, 3, 4]
[1, 2, 3, 4, 5]
或者,您可以通过使用enumerate来避免神秘的rangelenlst:

for n,_ in enumerate(lst,1):
    print(lst[:n])
您还可以使用“从itertools累积”:

from itertools import accumulate
for s in accumulate([i] for i in lst):
    print(s)
您可能会将range1、lenlst+1替换为rangelenlst,将l[:n]替换为lst[:n+1]。否则,这是最干净的。
from itertools import accumulate
for s in accumulate([i] for i in lst):
    print(s)