在python中,从列表的开头开始逐步迭代较大的片
考虑下面的代码,它打印列表的前n个元素,从n=1..n 我正在寻找这段代码的foreach风格版本,以避免稍微混淆的range1,lenlst+1。差不多在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:
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)