我有许多长度相等的列表,比如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循环,但我仍然坚持创建'动态'列表名称。我应该使用字典吗?
提前感谢您的帮助!
答案 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))) )
但是,蒂姆说你应该检查一下你的数据结构是否正确......