2014-04-14 65 views
0

我在Python中列表有問題。當我打印「列表」我有這樣的結果:如何合併列表中的項目

[1,2,3] 
[4,5,6] 

所以我有兩個列表中的一個變量我猜。我怎樣才能將這些項目合併到一個變量?

+1

你可以請爲清晰起見提供更多的代碼 – sshashank124

+0

變量(或Python中的「名稱」)一次只能是一個對象。你有什麼是包含兩個列表的列表(或類似),分別包含1,2,3和4,5,6。 – Benproductions1

+0

可能重複[在Python中合併兩個列表?](http://stackoverflow.com/questions/1720421/merge-two-lists-in-python) – BlaShadow

回答

0

試試這個,

>>> a 
[[1, 2, 3], [4, 5, 6]] 
>>> result=[] 
>>> for i in a: 
    result+=i 


>>> result 
[1, 2, 3, 4, 5, 6] 
>>> 

OR

>>> a 
[[1, 2, 3], [4, 5, 6]] 
>>> sum(a, []) 

輸出:

[1, 2, 3, 4, 5, 6] 

OR

>>> a1 
[1, 2, 3] 
>>> a2 
[4, 5, 6] 
>>> [item for item in itertools.chain(a1, a2)] 

輸出:

[1, 2, 3, 4, 5, 6] 
+0

這可以簡化爲只是'result = sum(a,[])'。 –

+0

@AlexThornton謝謝,更新。 – fledgling

+1

雖然重要的是要注意這可能相當緩慢。 –

0

如果:

returnList = [[1,2,3], [4,5,6]] 

你可以很容易做到:

>>> returnList = [j for i in returnList for j in i] 

或者:

>>> returnList = [j for i in returnList for j in i] 

或者,你也可以這樣做:

>>> returnList = reduce(lambda i,j: i+j, returnList) 

雙方將返回:[1, 2, 3, 4, 5, 6]

+0

好吧,但我必須用我的變量returnList? – user3531797

+0

@ user3531797,'a'是你替換的 – sshashank124

+0

@ user3531797,查看更新後的答案。 – sshashank124

2

我會做,使用itertools.chain

>>> import itertools 
>>> a = [[1, 2, 3], [4 , 5, 6]] 
>>> a = itertools.chain.from_iterable(a) 
>>> a 
[1, 2, 3, 4, 5, 6] 
0
l = [['0', '1', '2'], ['3', '4', '5']] 

def merge_list(l): 
    temp = [] 
    for i in l: 
     for j in i: 
      temp.append(j) 
    return temp 

print merge_list(l) 

結果

['0', '1', '2', '3', '4', '5'] 
+1

輸入和結果是一樣的嗎? – fledgling

+1

是啊,甚至沒有注意到...返回的輸入,而不是溫度...哎呀。感謝您的高舉 – heinst

0

這裏我收集了一些解決方案,只是嘗試timeit:

這裏是我的代碼片段:

#!/usr/bin/python 

def f1(List): 
    x = [] 
    [ x.extend(y) for y in List ] 
    return x 

def f2(List): 
    return sum(List, []) 

def f3(List): 
    temp = [] 
    for i in List: 
     for j in i: 
      temp.append(j) 
    return temp 

def f4(List): 
    result=[] 
    for i in List: 
     result += i 
    return result 

def f5(List): 
    return [j for i in List for j in i] 

import cProfile 
import itertools 
from faker import Faker 
from timeit import Timer 

s = Faker() 
# instead of faker you can use random module 
func = [ f1, f2, f3, f4, f5, f6 ] 
Lis = [[ s.random_int(min=1, max=99) 
     for x in range(1000) ] 
     for x in range(100)] 

for fun in func: 
    t = Timer(lambda: fun(Lis)) 
    print fun.__name__, cProfile.run('t.timeit(number=1000)') 

輸出:

f1   102011 function calls in 0.701 seconds 

    Ordered by: standard name 

    ncalls tottime percall cumtime percall filename:lineno(function) 
     1 0.000 0.000 0.701 0.701 <string>:1(<module>) 
    1000 0.040 0.000 0.495 0.000 merge.py:3(f1) 
    1000 0.001 0.000 0.495 0.000 merge.py:42(<lambda>) 
     1 0.000 0.000 0.000 0.000 timeit.py:143(setup) 
     1 0.000 0.000 0.701 0.701 timeit.py:178(timeit) 
     1 0.206 0.206 0.701 0.701 timeit.py:96(inner) 
     1 0.000 0.000 0.000 0.000 {gc.disable} 
     1 0.000 0.000 0.000 0.000 {gc.enable} 
     1 0.000 0.000 0.000 0.000 {gc.isenabled} 
     1 0.000 0.000 0.000 0.000 {globals} 
     1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects} 
    100000 0.455 0.000 0.455 0.000 {method 'extend' of 'list' objects} 
     2 0.000 0.000 0.000 0.000 {time.time} 


None 
f2   3011 function calls in 37.747 seconds 

    Ordered by: standard name 

    ncalls tottime percall cumtime percall filename:lineno(function) 
     1 0.000 0.000 37.747 37.747 <string>:1(<module>) 
    1000 0.003 0.000 37.418 0.037 merge.py:42(<lambda>) 
    1000 0.004 0.000 37.415 0.037 merge.py:8(f2) 
     1 0.000 0.000 0.000 0.000 timeit.py:143(setup) 
     1 0.000 0.000 37.747 37.747 timeit.py:178(timeit) 
     1 0.329 0.329 37.747 37.747 timeit.py:96(inner) 
     1 0.000 0.000 0.000 0.000 {gc.disable} 
     1 0.000 0.000 0.000 0.000 {gc.enable} 
     1 0.000 0.000 0.000 0.000 {gc.isenabled} 
     1 0.000 0.000 0.000 0.000 {globals} 
     1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects} 
    1000 37.411 0.037 37.411 0.037 {sum} 
     2 0.000 0.000 0.000 0.000 {time.time} 


None 
f3   100002011 function calls in 28.044 seconds 

    Ordered by: standard name 

    ncalls tottime percall cumtime percall filename:lineno(function) 
     1 0.000 0.000 28.044 28.044 <string>:1(<module>) 
    1000 20.304 0.020 27.676 0.028 merge.py:11(f3) 
    1000 0.001 0.000 27.677 0.028 merge.py:42(<lambda>) 
     1 0.000 0.000 0.000 0.000 timeit.py:143(setup) 
     1 0.000 0.000 28.044 28.044 timeit.py:178(timeit) 
     1 0.367 0.367 28.044 28.044 timeit.py:96(inner) 
     1 0.000 0.000 0.000 0.000 {gc.disable} 
     1 0.000 0.000 0.000 0.000 {gc.enable} 
     1 0.000 0.000 0.000 0.000 {gc.isenabled} 
     1 0.000 0.000 0.000 0.000 {globals} 
100000000 7.372 0.000 7.372 0.000 {method 'append' of 'list' objects} 
     1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects} 
     2 0.000 0.000 0.000 0.000 {time.time} 


None 
f4   2011 function calls in 0.826 seconds 

    Ordered by: standard name 

    ncalls tottime percall cumtime percall filename:lineno(function) 
     1 0.000 0.000 0.826 0.826 <string>:1(<module>) 
    1000 0.463 0.000 0.463 0.000 merge.py:18(f4) 
    1000 0.001 0.000 0.464 0.000 merge.py:42(<lambda>) 
     1 0.000 0.000 0.000 0.000 timeit.py:143(setup) 
     1 0.000 0.000 0.826 0.826 timeit.py:178(timeit) 
     1 0.362 0.362 0.826 0.826 timeit.py:96(inner) 
     1 0.000 0.000 0.000 0.000 {gc.disable} 
     1 0.000 0.000 0.000 0.000 {gc.enable} 
     1 0.000 0.000 0.000 0.000 {gc.isenabled} 
     1 0.000 0.000 0.000 0.000 {globals} 
     1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects} 
     2 0.000 0.000 0.000 0.000 {time.time} 


None 
f5   2011 function calls in 4.608 seconds 

    Ordered by: standard name 

    ncalls tottime percall cumtime percall filename:lineno(function) 
     1 0.000 0.000 4.608 4.608 <string>:1(<module>) 
    1000 4.253 0.004 4.253 0.004 merge.py:24(f5) 
    1000 0.001 0.000 4.254 0.004 merge.py:42(<lambda>) 
     1 0.000 0.000 0.000 0.000 timeit.py:143(setup) 
     1 0.000 0.000 4.608 4.608 timeit.py:178(timeit) 
     1 0.354 0.354 4.608 4.608 timeit.py:96(inner) 
     1 0.000 0.000 0.000 0.000 {gc.disable} 
     1 0.000 0.000 0.000 0.000 {gc.enable} 
     1 0.000 0.000 0.000 0.000 {gc.isenabled} 
     1 0.000 0.000 0.000 0.000 {globals} 
     1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects} 
     2 0.000 0.000 0.000 0.000 {time.time} 


None