为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

哆啦的时光机 2022-09-06 16:55:39
请考虑以下代码,该代码打印列表的第一个元素,从nn = 1..Nlst = [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
查看完整描述

2 回答

?
ibeautiful

TA贡献1993条经验 获得超5个赞

如果你要操作索引和下标(这通常不是很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 accumulate

for s in accumulate([i] for i in lst):

    print(s)


查看完整回答
反对 回复 2022-09-06
?
www说

TA贡献1775条经验 获得超8个赞

我不认为有一个很好的形式,以你想要的形式。你的方式已经很好了。我能想到的一个替代方案是通过一次附加一个项目来构建它们。


prefix = []

for x in lst:

    prefix.append(x)

    print(prefix)


查看完整回答
反对 回复 2022-09-06
  • 2 回答
  • 0 关注
  • 99 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信