每次运行后迭代功能更改参数

时间:2015-03-27 20:42:32

标签: python loops iteration

我编写了一个代码,它带有一个列表和一个起始点,但如果没有给出起点,我希望它从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]]))并假设没有给出起点我将如何实现这一目标。

由于

2 个答案:

答案 0 :(得分:2)

无需跟踪列表中项目的索引。您只需遍历项目本身。但是,在这种情况下,您希望使用+而不是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这样的内容,包括列表理解,reduceitertools.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))

答案 1 :(得分:0)

遍历整个列表进行迭代。你不必担心它。

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

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

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

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