Python - 操作列表以创建另一个列表

时间:2012-07-22 09:51:47

标签: python list

我有许多长度相等的列表,比如4,但这可能会改变。我想要做的是组合这些列表,以便将每个列表的第一项item [0]组合起来形成一个新列表。与项目[1],项目[2]等类似。这看起来很简单,但我如何确保列表名称(即slide1)是从第一个列表(list1)动态创建的。

即。我想离开这个:

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循环,但我仍然坚持创建'动态'列表名称。我应该使用字典吗?

提前感谢您的帮助!

4 个答案:

答案 0 :(得分: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])

答案 1 :(得分: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]。这样更清洁,更易于维护,并且可以扩展。

答案 2 :(得分:1)

如果列表非常大并且您只需要遍历新幻灯片,则使用itertools.izip会更有效。

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

答案 3 :(得分:1)

直接的答案是,您似乎想要一个dict,其中list1元素作为键,可以按如下方式实现:

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

但是,蒂姆说你应该检查一下你的数据结构是否正确......