Python 是否有一种方法可以将列表中的元素插入到第二个列表中的每个第k个位置?

Python 是否有一种方法可以将列表中的元素插入到第二个列表中的每个第k个位置?,python,numpy,Python,Numpy,我需要将第一个列表中的所有元素放置到第二个列表的第knth个位置。其中,k=0,1,2…且n为单个数字。目前我正在这样做(使用numpy) 其中位置为2D。我正试图找到最有效的方式(时间和空间)与numpy做到这一点 注意:上述代码确实有效。我只想让它更有效率。只需使用以下参数的轴即可: 编写此代码时未损坏任何循环。如果您的输入实际上是两个列表s,则无需在此处使用NumPy: a = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] b = [10, 11, 12] prin

我需要将第一个列表中的所有元素放置到第二个列表的第knth个位置。其中,
k=0,1,2…
且n为单个数字。目前我正在这样做(使用numpy)

其中位置为2D。我正试图找到最有效的方式(时间和空间)与numpy做到这一点


注意:上述代码确实有效。我只想让它更有效率。

只需使用以下参数的
轴即可:


编写此代码时未损坏任何循环。

如果您的输入实际上是两个
列表
s,则无需在此处使用NumPy:

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

print([z for x, y in zip(b, a) for z in [x] + y])
# [10, 1, 2, 3, 11, 4, 5, 6, 12, 7, 8, 9]
%timeit [z for x, y in zip(b, a) for z in [x] + y]
# 1000000 loops, best of 3: 1.04 µs per loop
或者,如果
a
是平坦的,并且您每
n
个元素指定一次中断:

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

print([z for x, y in zip(b, zip(*[iter(a)] * n)) for z in (x,) + y])
# [10, 1, 2, 3, 11, 4, 5, 6, 12, 7, 8, 9]
%timeit [z for x, y in zip(b, zip(*[iter(a)] * n)) for z in (x,) + y]
# 1000000 loops, best of 3: 1.31 µs per loop
作为比较,以下是基于NumPy的解决方案:

import numpy as np


a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
b = np.array([10, 11, 12])
print(np.concatenate([b[..., None], a], axis=1).ravel().tolist())
# [10, 1, 2, 3, 11, 4, 5, 6, 12, 7, 8, 9]
%timeit np.concatenate([b[..., None], a], axis=1).ravel().tolist()
# 100000 loops, best of 3: 2.43 µs per loop

这表明,至少对于您的输入来说,基于Python的
列表
解决方案实际上比诉诸NumPy更快。

请分享一个你能更好地描述你想要做什么吗?你基本上想压缩两个数组,例如
a=[a1,a2,a3];b=[b1,b2,b3]
变成
压缩=[a1,b1,a2,b2,a3,b3]
?我希望现在更清楚。看看这个-这正是我想要的!谢谢
n = 3
a = [1, 2, 3, 4, 5, 6, 7, 8, 9]
b = [10, 11, 12]

print([z for x, y in zip(b, zip(*[iter(a)] * n)) for z in (x,) + y])
# [10, 1, 2, 3, 11, 4, 5, 6, 12, 7, 8, 9]
%timeit [z for x, y in zip(b, zip(*[iter(a)] * n)) for z in (x,) + y]
# 1000000 loops, best of 3: 1.31 µs per loop
import numpy as np


a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
b = np.array([10, 11, 12])
print(np.concatenate([b[..., None], a], axis=1).ravel().tolist())
# [10, 1, 2, 3, 11, 4, 5, 6, 12, 7, 8, 9]
%timeit np.concatenate([b[..., None], a], axis=1).ravel().tolist()
# 100000 loops, best of 3: 2.43 µs per loop