以交错方式组合两个 Python 列表

Combining two Python lists in an interleaved manner

我想交错放置两个列表。例如:

arr1 = [1,2,3,4,5,6]
arr2 = [9,8,7,6]

我不喜欢

这样的输出
[1,9,2,8,3,7,4,6,5,6]

我创建了以下脚本,但由于某种原因无法正常工作:

arr1 = [1,2,3,4,5,6]
arr2 = [9,8,7,6]
x = 0

for a in arr2:
    x = x + 2
    arr1.insert(x, a)

我哪里错了?我不是在寻找随机洗牌。我正在使用 python2.x

您可以使用 itertools 模块中的 zip_longestchain.from_iterable

>>> arr1 = [1,2,3,4,5,6]
>>> arr2 = [9,8,7,6]
>>> from itertools import chain, zip_longest
>>> [i for i in chain.from_iterable(zip_longest(arr1, arr2)) if i is not None]
[1, 9, 2, 8, 3, 7, 4, 6, 5, 6]

您需要在 python-2.x

中使用 izip_longest 而不是 zip_longest

如果您真的想以随机方式随机播放它们,关键是将它们组合成一个列表并使用 shuffle()。

from random import shuffle
import itertools as it

arr1 = [1,2,3,4,5,6]
arr2 = [9,8,7,6]
x = list(it.chain(arr1,arr2))
shuffle(x)
print(x)

编辑 问题已更新以反映所需的顺序不是随机的。

我想出了一个不同的方法来做到这一点,没有进口。

mylist = []
a = [1,2,3,4,5,6]
b = [9,8,7,6]
for x in range(max(len(a), len(b))):
    if x < len(a):
        mylist.append(a[x])
    if x < len(b):
        mylist.append(b[x])