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

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循环,但是在创建“动态”列表名称方面卡住了。否则,我应该使用字典吗?
感谢您提前的帮助!

你甚至可以使用 zip 替换 for 循环。 - Jonas Schäfer
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])

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']]

现在,您可以使用lists[0]代替list1,并使用slides[0]代替slide1。这样更加简洁、易于维护,并且可以扩展。

1

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

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

1
直接的回答是,看起来你想要一个以list1元素为键的字典,可以通过以下方式实现:
dict( zip(list1, list(zip(list2, list3))) )

然而,蒂姆说得对,你应该审查你的数据结构...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接