请考虑以下代码,该代码打印列表的第一个元素,从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)
www说
TA贡献1775条经验 获得超8个赞
我不认为有一个很好的形式,以你想要的形式。你的方式已经很好了。我能想到的一个替代方案是通过一次附加一个项目来构建它们。
prefix = []
for x in lst:
prefix.append(x)
print(prefix)
添加回答
举报
0/150
提交
取消