在 python 中从列表开始迭代逐渐变大的切片

请考虑以下代码,该代码打印列表的第一个元素,从nn = 1..N


lst = [1,2,3,4,5]


for n in range(1, len(lst)+1):

    print(lst[:n])


>>> [1]

>>> [1, 2]

>>> [1, 2, 3]

>>> [1, 2, 3, 4]

>>> [1, 2, 3, 4, 5]

我正在寻找此代码的-样式版本,以避免稍微混乱。类似的东西foreachrange(1, len(lst)+1)


for sublist in ___(lst):

    print(sublist)

我相信有一个很好的方法来做到这一点或什么,但我找不到任何东西。itertools


哆啦的时光机
浏览 100回答 2
2回答

ibeautiful

如果你要操作索引和下标(这通常不是很python),你必须习惯python中range()的外观。大多数情况下,有一种方法可以在不运行索引的情况下处理列表。这不是一个很好的例子,但它说明了可以采取的方法: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]或者,您可以通过使用枚举来避免隐晦的范围(len(lst)):for n,_ in enumerate(lst,1):    print(lst[:n])你也可以使用累加从迭代工具:from itertools import accumulatefor s in accumulate([i] for i in lst):    print(s)

www说

我不认为有一个很好的形式,以你想要的形式。你的方式已经很好了。我能想到的一个替代方案是通过一次附加一个项目来构建它们。prefix = []for x in lst:    prefix.append(x)    print(prefix)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python