2012-04-18 54 views
3

我有N個元素的列表,我用某一步分析它,比方說3:合併切片名單

slice0 = text[0::3] 
slice1 = text[1::3] 
slice2 = text[2::3] 

separatedly做一些處理之後,現在我需要將它們合併回到他們在原始列表中的位置相同。有沒有類似(簡單)的方法來做到這一點?

實施例:

L = [1,2,3,4,5,6] -> L0 = [1,4], L1 = [2,5], L2 = [3,6] 

然後一些處理(比如分別由1,2和3乘以每個列表:

L0 = [1,4], L1 = [4,10], L2 = [9,18] 

合併他們回到它們的原始位置

L = [1,4,9,4,10,18] 

謝謝。

回答

5

可以使用zip()功能的加入他們重新走到一起:

>>> l0 = [1,4]; l1 = [4,10]; l2 = [9,18] 
>>> zip(l0, l1, l2) 
[(1, 4, 9), (4, 10, 18)] 
>>> [x for t in zip(l0, l1, l2) for x in t] 
[1, 4, 9, 4, 10, 18] 

或者使用itertools.chain

>>> from itertools import chain 
>>> list(chain(*zip(l0, l1, l2))) 
[1, 4, 9, 4, 10, 18] 

在Python 3,凡zip是發電機的功能,itertools.chain.from_iterable可能preferrable,像其他人那樣已經指出了。

+1

可以使用[鏈(* ...)',[chain.from_iterable](http://docs.python.org/library/itertools.html#itertools.chain.from_iterable)對於Python 3.x很有用,其中'zip'是一個生成器)。 – ovgolovin 2012-04-18 18:11:56

+0

@ovgolovin:當然,這可以避免轉換成元組。 – 2012-04-18 18:14:02

4
>>> L0 = [1,4] 
>>> L1 = [4,10] 
>>> L2 = [9,18] 
>>> [x for zipped in zip(L0, L1, L2) for x in zipped] 
[1, 4, 9, 4, 10, 18] 

或使用替代itertools.chain

>>> from itertools import chain 
>>> list(chain.from_iterable(zip(L0, L1, L2))) 
[1, 4, 9, 4, 10, 18] 
2
>>> from itertools import chain 
>>> l0, l1, l2, = [1,4], [4,10], [9,18] 
>>> list(chain.from_iterable(zip(l0,l1,l2))) 
[1, 4, 9, 4, 10, 18] 
0
L0 = [1,4] 
L1 = [4,10] 
L2 = [9,18] 

#returns a tuple 

my_data = sum(zip(L0,L1,L2),()) 

#or if you need a list 

my_data = list(sum(zip(L0,L1,L2),())) 

元組:

>>> my_data 
(1, 4, 9, 4, 10, 18) 

列表:

>>> my_data 
[1, 4, 9, 4, 10, 18]