在每个 运行 之后迭代函数更改参数

Iterate function changing parameter after each run

我写了一个代码,它有一个列表和一个起点,但是如果没有给出起点,我希望它从 0 开始。我遇到的问题是我希望它从头开始迭代( 0) 到最后 (len(a_list)-1),但是我不知道如何每次都开始增加一个,直到它遍历所有内容。

这是一个蹩脚的小例子:

def test(a_list, start = 0):
    final = []
    for i in a_list[start]:
        final.append(i)
    return final

print (test([[1,2,3,4],[2,3,4]]))

这输出:[1, 2, 3, 4]

而我希望它输出 [1, 2, 3, 4, 2, 3, 4]

在不更改 print (test([[1,2,3,4],[2,3,4]])) 的情况下,假设没有给出起点,我将如何实现这一目标。

谢谢

无需跟踪列表中项目的索引。您只需遍历项目本身。但是,在这种情况下,您希望使用 + 连接列表而不是 append 将它们连接在一起。

def test(list_of_lists):
    final = []
    for L in list_of_lists:
        final += L
    return final

如果您需要从特定索引开始,您可以对列表进行切片:

def test(list_of_lists, start = 0):
    final = []
    for L in list_of_lists[start:]:
        final += L
    return final

还有several succinct ways to concatenate a list of lists这样的,包括列表理解,reduce,和itertools.chain.from_iterable

print ([item for L in list_of_lists for item in L])
print (reduce(list.__add__, list_of_lists, []))

from itertools import chain
print (list(chain.from_iterable(list_of_lists))

遍历整个列表。你不用担心。

final = []
for i in a_list:
    final.append(i)

或者,如果您想从 start 开始,请执行以下操作:

final = []
for i in range(start, len(a_list - 1):
    final.append(i)

这将从列表的开头到结尾添加值。