2012-07-22 40 views
4

我有一些長度相等的列表,比如說4,但是這可以改變。我想要做的就是將這些列表合併起來,以便將每個列表中的第一個項目[0]合併爲一個新列表。類似於項目[1],項目[2]等。這似乎很簡單,但我如何確保列表名稱(即slide1)是從第一個列表(列表1)動態創建的。Python - 操縱列表來創建另一個列表

即我想從這個去:

list1 = ['slide1','slide2','slide3','slide4'] 
list2 = [1,2,3,4] 
list3 = ['banana', 'apple', 'pear', 'orange'] 

這樣:

slide1 = ['slide1',1,'banana'] 
slide2 = ['slide2',2,'apple'] 
slide3 = ['slide3',3,'pear'] 
slide4 = ['slide4',4,'orange'] 

我需要這樣做的原因是爲了隨後進入這些列表到數據庫中。任何線索?我想我知道如何做for循環,但我堅持創建'動態'列表名稱。我應該使用字典嗎?

在此先感謝您的幫助!

+0

您甚至可以使用[zip](http://docs.python.org/library/functions.html#zip)替換for循環。 – 2012-07-22 09:52:56

回答

10

很簡單:

lst = zip(list1, list2, list3) 

print(lst[0]) 
>>> ('slide1', 1, 'banana') 

# in case you need a list, not a tuple 
slide1 = list(lst[0]) 
+0

太棒了!非常感謝... – koend 2012-07-22 12:20:09

3

你不想創建即時變量名。

事實上,你不應該有list1, list2, list3擺在首位,而是一個單獨的列表稱爲lists

>>> lists = [['slide1','slide2','slide3','slide4'], [1,2,3,4], ['banana', 'apple', 'pear', 'orange']] 
>>> slides = [list(slide) for slide in zip(*lists)] 
>>> slides 
[['slide1', 1, 'banana'], ['slide2', 2, 'apple'], ['slide3', 3, 'pear'], ['slide4', 4, 'orange']] 

現在,而不是list1,您使用lists[0],而不是slide1,您使用slides[0]。這是更清潔,更容易維護,並且它縮放。

1

如果列表非常大並且您只需要遍歷新幻燈片,則使用itertools.izip會更有效。

import itertools 
for x in itertools.izip(list1, list2, list3): 
    print x 
1

一個直接的答案是,它似乎你想要一個dict與列表1元作爲重點,可以實現如下:

dict(zip(list1, list(zip(list2, list3)))) 

不過,Tim的正確地說,你應該檢查你的數據結構...