4

我有许多长度相等的列表,比如 4 个,但这可以改变。我想要做的是组合这些列表,以便将每个列表的第一项 item[0] 组合成一个新列表。与 item[1]、item[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

4 回答 4

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])
于 2012-07-22T09:53:04.427 回答
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]。这更清洁,更易于维护,并且可以扩展。

于 2012-07-22T10:22:32.167 回答
1

A direct answer is that it seems you want a dict with the list1 element as a key which can be achieved as follows:

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

However, Tim's correct in saying you should review your data structure...

于 2012-07-22T11:32:30.263 回答
1

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

import itertools
for x in itertools.izip(list1, list2, list3):
    print x
于 2012-07-22T10:29:04.943 回答