为什么结果与使用merge(lista + listb)不同

时间:2015-07-10 21:43:23

标签: python

在这里,我尝试合并这两个列表,为所有项目制作一个。

n = [[1, 2, 3], [4, 5, 6, 7, 8, 9]]

def flatten(n):
    s=[]
    for x in n:
        s.append(x)
    return s

print flatten(n)

我试图得到结果

[1,2,3,4,5,6,7,8,9] 

但我正在

[[1, 2, 3], [4, 5, 6, 7, 8, 9]]

我不明白为什么,我想我清楚地将每个值分配给列表' s'在for循环中。

3 个答案:

答案 0 :(得分:3)

您要附加到列表中。每个子列表都作为自己的项目附加到新列表中,与最初的方式完全相同。您想要扩展列表:

s.extend(x)

答案 1 :(得分:2)

使用extend,而不是追加

n = [[1, 2, 3], [4, 5, 6, 7, 8, 9]]

def flatten(n):
    s=[]
    for x in n:
        s.extend(x)
    return s

print flatten(n)

祝你好运。

答案 2 :(得分:2)

您应该使用list.extend,追加是附加每个子列表而不是仅添加内容。 x是每个子列表,所以只需附加子列表显然会再次为您提供列表。

您还可以使用itertools.chain展平列表:

n = [[1, 2, 3], [4, 5, 6, 7, 8, 9]]

print(list(chain.from_iterable(n)))

或使用list comp

n = [[1, 2, 3], [4, 5, 6, 7, 8, 9]]

print([ele for sub in n for ele in sub])