每 n 个位置将列表中的项目插入到另一个列表

2024-02-28

我有以下清单。

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数组的答案都很好。


这是一个itertools https://docs.python.org/3/library/itertools.html基于方法,它也适用于将任意数量的元素从一个列表插入到另一个列表。为此,我定义了一个生成器函数,它将插入和元素l2 into l1 every i items:

def insert_every_n(l1, l2, k):
    i1, i2 = iter(l1), iter(l2)
    while True:
        try:
            yield from islice(i1, k)
            yield next(i2)
        except StopIteration:
            return

这是通过产生高达i来自迭代器的项目l1在每次迭代中使用itertools.islice https://docs.python.org/3/library/itertools.html#itertools.islice. With yield from https://www.python.org/dev/peps/pep-0380/#formal-semantics我们生成的项目与切片迭代器中的项目一样多,因此迭代器会耗尽(这是一个快捷方式)for v in g: yield v).

最后我们可以包起来yield带有 a 的语句try/expect抓住StopIteration警告。


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

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

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

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

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

list(insert_every_n(vector, inserted_elements, k=3))
# [1, 2, 3, 2, 4, 5, 6, 2, 7, 8, 9, 2, 10, 2]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

每 n 个位置将列表中的项目插入到另一个列表 的相关文章

随机推荐