Python-操纵列表以创建另一个列表
我有很多相同长度的列表,比如说4个,但这可能会改变。我要做的是合并这些列表,以便合并每个列表的第一项,即项[0],以形成一个新列表。与第[1]项、第[2]项等类似,这似乎很简单,但如何确保从第一个列表(列表1)动态创建列表名称(即slide1) i、 e.我想从这开始:Python-操纵列表以创建另一个列表,python,list,Python,List,我有很多相同长度的列表,比如说4个,但这可能会改变。我要做的是合并这些列表,以便合并每个列表的第一项,即项[0],以形成一个新列表。与第[1]项、第[2]项等类似,这似乎很简单,但如何确保从第一个列表(列表1)动态创建列表名称(即slide1) i、 e.我想从这开始: list1 = ['slide1','slide2','slide3','slide4'] list2 = [1,2,3,4] list3 = ['banana', 'apple', 'pear', 'orange'] 为此:
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循环,但我一直在创建“动态”列表名。我应该用字典吗
提前感谢您的帮助 非常简单:
lst = zip(list1, list2, list3)
print(lst[0])
>>> ('slide1', 1, 'banana')
# in case you need a list, not a tuple
slide1 = list(lst[0])
您不希望动态创建变量名 事实上,您首先不应该拥有
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']]
现在,使用
列表[0]
,而不是列表1
,使用幻灯片[0]
,而不是幻灯片1
。这更干净、更易于维护,并且可以扩展。使用itertools。如果列表非常大,您只需反复浏览新幻灯片,izip将更有效
import itertools
for x in itertools.izip(list1, list2, list3):
print x
一个直接的答案是,您似乎想要一个带有list1元素的
dict
,它可以通过以下方式实现:
dict( zip(list1, list(zip(list2, list3))) )
但是,Tim说您应该检查数据结构是正确的…您甚至可以使用替换for循环。