2017-10-04 48 views
0

我有幾個列出與相同數量的元素,例如:蟒蛇3添加許多列表中一個

[[1, 2, 3, 1], [3, 2, 1, 2], [3, 3, 1, 1], [...], .....etc... 

我想獲得包含在所列出的清單中的所有項目的單個列表,例如:

[1,2,3,1,3,2,1,2,3,3,1,1,..........]

我怎樣才能得到這個結果最簡單的方法嗎?

我試過這種方式,但我找不到解決方案。

a = [[1, 2, 3, 1], [3, 2, 1, 2], [3, 3, 1, 1]] 

b = len(a) 

for n in range(b): 
    a[0] += a[n] 
    print(a[0]) 

結果:

[1, 2, 3, 1, 1, 2, 3, 1] 

[1, 2, 3, 1, 1, 2, 3, 1, 3, 2, 1, 2] 

[1, 2, 3, 1, 1, 2, 3, 1, 3, 2, 1, 2, 3, 3, 1, 1] 

我只會用沒有第一個列表的重複生產的最後名單,但我不能糾正,並推斷它。

謝謝。

回答

2

一個簡單的解決方案將使用列表的方法extend

a = [[1, 2, 3, 1], [3, 2, 1, 2], [3, 3, 1, 1]] 
result = [] 
for aa in a: 
    result.extend(aa) 

我希望你會發現Python的itertools也有趣。

from itertools import chain 

a = [[1, 2, 3, 1], [3, 2, 1, 2], [3, 3, 1, 1]] 
result = list(chain(*a)) 

*a基本上是爲您打開包裝清單。

0

Python有一個reduce()功能,可以像這樣使用:

a = [[1, 2, 3, 1], [3, 2, 1, 2], [3, 3, 1, 1]] 

import functools 
functools.reduce(lambda x, y: x+y, a) 

結果:

[1, 2, 3, 1, 3, 2, 1, 2, 3, 3, 1, 1] 

這可以比就地修改元件降低效率,因爲在這個問題。如果你想繼續使用它,簡單的事情是從一個空列表開始,而不是重新使用a[0]

result = [] 
for e in a: 
    result += e 
print(result)