如何在向量中以固定间隔插入元素

2024-04-20 02:17:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下清单。你知道吗

vector = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
inserted_elements = [2, 2, 2, 2, 2]

我想通过插入每两个元素得到以下结果。你知道吗

output = [1, 2, 2, 3, 4, 2, 5, 6, 2, 7, 8, 2, 9, 10, 2]

不仅是Python列表,而且使用numpy数组的答案也不错。你知道吗


Tags: 答案numpy元素列表output数组elementsvector
3条回答

numpy数组步骤:

1。你知道吗

>>> a=np.reshape(np.matrix([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]),(5, 2))
>>> a
matrix([[ 1,  2],
        [ 3,  4],
        [ 5,  6],
        [ 7,  8],
        [ 9, 10]])

2。你知道吗

>>> b=np.reshape(np.matrix([2, 2, 2, 2, 2]),(5, 1))
>>> b
matrix([[2],
        [2],
        [2],
        [2],
        [2]])

三。你知道吗

>>> M = np.append(a, b, axis=1)
>>> M
matrix([[ 1,  2,  2],
        [ 3,  4,  2],
        [ 5,  6,  2],
        [ 7,  8,  2],
        [ 9, 10,  2]])

第四条。你知道吗

>>> result=np.array(M).flatten()
>>> result
array([ 1,  2,  2,  3,  4,  2,  5,  6,  2,  7,  8,  2,  9, 10,  2])

传统的for循环方法可能如下所示,从vector中选择2个元素,从inserted_elements中选择1个元素,并生成output列表

vector = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
inserted_elements = [2, 2, 2, 2, 2]

output = []

#Pick two elements from vector and one element from inserted_elements and add it to output list
for idx in range(0,len(vector),2):

    output.extend(vector[idx:idx+2] + [inserted_elements[int(idx/2)]])

print(output)

同样的事情,在列表理解将是

output = [ v for idx in range(0,len(vector),2) for v in vector[idx:idx+2] + [inserted_elements[int(idx/2)]]]

输出将是

[1, 2, 2, 3, 4, 2, 5, 6, 2, 7, 8, 2, 9, 10, 2]

下面是一种基于^{}的方法,它也适用于从一个列表插入到另一个列表的任意数量的元素。为此,我定义了一个生成器函数,它将从l2l1的每个i项插入and元素:

def insert_n(l1, l2, i):
    while True:
        try:
            yield from islice(l1, i)
            yield next(l2)
        except StopIteration:
            return

这是通过使用^{}在每次迭代中从迭代器l1生成多达i项来实现的。使用^{}我们产生的项目与切片的iterable中的项目一样多,因此iterable将耗尽(这是for v in g: yield v的快捷方式)。你知道吗

最后,我们可以用try/expect来包装yield语句,以捕获StopIteration警告。你知道吗


让我们尝试一下提议的示例:

vector = iter([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
inserted_elements = iter([2, 2, 2, 2, 2])

list(insert_every_n(vector, inserted_elements, i=2))
# [1, 2, 2, 3, 4, 2, 5, 6, 2, 7, 8, 2, 9, 10, 2]

如果我们想每3项添加一项l2

vector = iter([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
inserted_elements = iter([2, 2, 2, 2])

list(insert_every_n(vector, inserted_elements, i=3))
# [1, 2, 3, 2, 4, 5, 6, 2, 7, 8, 9, 2, 10, 2]

相关问题 更多 >