这是一个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]