2015-07-10 51 views
0

这里我试图合并这两个列表,使所有项目都变成白色。为什么结果不同于使用合并(lista + listb)

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]] 

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

+0

仅供参考,添加名单将它们组合起来。 'x = n [0] + n [1]'会得到'x = [1,2,3,4,5,6,7,8,9]' – TehTris

回答

3

您正在追加到列表中。每个子列表都作为自己的项目附加到新列表中,完全按照它原来的方式。你想,而不是扩展列表:

s.extend(x) 
2

使用扩展,而不是追加

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

你应该使用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]) 
+0

Ahem! [链接](https://docs.python.org/2/library/itertools.html#itertools.chain) –

+0

@BhargavRao,添加;) –

+1

也可以添加[this](https://docs.python.org /2/tutorial/datastructures.html#list-comprehensions):D –

相关问题