Python - 如何使用已有长度相同的多个列表创建一个新的列表?

3

给定两个长度相同的列表list1和list2,创建一个新列表,其中包含list1的第一个元素,list2的第一个元素,list1的第二个元素,list2的第二个元素,依此类推(换句话说,新列表应该由list1和list2的交替元素组成)。例如,如果list1包含[1, 2, 3],list2包含[4, 5, 6],那么新列表应该包含[1, 4, 2, 5, 3, 6]。将新列表与变量list3关联。

    list1 = []
    list2 = []
    list3 = []
    for i in range(len(list3)):
        list3.append(list1)
        list3.append(list2)

我相信这是完全错误的。我应该如何改进?顺便说一下,我认为这必须包括len和range。


2
当你到达那里时,len为0,所以你不会进入for循环...这是一件事。 - Joran Beasley
1
你确定吗?你运行了你的代码吗? - monkut
4个回答

5

我建议使用列表推导式来完成这个任务,而不是依赖于lenrange等方法。例如:

>>> list1 = [1, 2, 3]
>>> list2 = ['a', 'b', 'c']
>>> zip(list1, list2)
[(1, 'a'), (2, 'b'), (3, 'c')]
>>> [x for pair in zip(list1, list2) for x in pair]
[1, 'a', 2, 'b', 3, 'c']

5
>>> from itertools import chain
>>> list1 = [1, 2, 3]
>>> list2 = [4, 5, 6]
>>> list(chain.from_iterable(zip(list1, list2)))
[1, 4, 2, 5, 3, 6]

2
list1 = [1, 2, 3]
list2 = [4, 5, 6]
list3 = []

for x1, x2 in zip(list1, list2):
    list3.extend([x1, x2])

0
请看下面的代码片段,或许能有所帮助。
>>> list1 = [1,2,3]
>>> list2 = [4,5,6]
>>> list3 = []
>>> for i in range(len(list1)):
...     list3.append(list1[i])
...     list3.append(list2[i])
...
>>> list3
[1, 4, 2, 5, 3, 6]

1
在我看来,更好的写法是 for x1, x2 in zip(list1, list2): - wim
@wim 是的,那也可以。谢谢你指出来。 - Sidharth Shah

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