2012-07-22 41 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的正确地说,你应该检查你的数据结构...