如何连接两个列表以使元素处于替代位置?

How to concatenate two lists so that elements are in alternative position?

例如:

 a=[1,2,3,4,5,6]
 b=[7,8,9,10,11,12]

然后结果:

c=[1,7,2,8,3,9,4,10,5,11,6,12]

如何连接两个列表,使元素处于不同的位置??

我曾尝试将它们 link 放入新列表并重新排列,但它没有出现。 如果你能告诉我很长的路要走(不要过多使用内置函数),那就太好了。我是 python 的新手,我的学校教的不多。 谢谢。

假设它们的长度相同,只需在它们后面附加一个 for 循环即可:

c = []

for i in range(len(a)):
    c.append(a[i])
    c.append(b[i])

使用zip and list comprehension

>>> a = [1, 2, 3, 4, 5, 6]
>>> b = [7, 8, 9, 10, 11, 12]
>>> [x for xs in zip(a, b) for x in xs]
[1, 7, 2, 8, 3, 9, 4, 10, 5, 11, 6, 12]
>>> import itertools
>>> a = [1, 2, 3, 4, 5, 6]
>>> b = [7, 8, 9, 10, 11, 12]
>>> print list(itertools.chain.from_iterable(zip(a, b)))

对于 python 3 中大小不一的列表,您可以使用 filterzip_longest 过滤 None:

a = [1,2,3,4,5,6]
b = [7,8,9,10,11,12,13]

from itertools import chain, zip_longest

print(list(filter(None.__ne__ ,chain.from_iterable(zip_longest(a,b)))))
[1, 7, 2, 8, 3, 9, 4, 10, 5, 11, 6, 12, 13]

使用 python2 使用列表组合和过滤器 None 与 ele is not None:

print([ ele for ele in chain.from_iterable(zip_longest(a, b)) if ele is not None])

如果您可能将 None 作为列表中的值,请使用自定义标记值,将其用作 zip_longest 中的 fillvalue:

my_sent = object()
print([ ele for ele in chain.from_iterable(zip_longest(a, b,fillvalue=my_sent)) if ele is not my_sent])