如何用一行代码将列表元素批量插入到另一列表的指定索引位置?
一行代码实现指定位置插入元素
直接用列表推导式结合zip就能搞定,完全不需要itertools:
def insert_function(a, b, keys=None): return [item for pair in zip(b, a) for item in pair]
测试你的例子:
a = [1, 2, 3, 4] b = [5, 6, 7, 8] print(insert_function(a, b)) # 输出: [5, 1, 6, 2, 7, 3, 8, 4]
为什么这个方法可行?
你的需求本质是把b和a的对应元素两两配对(b[i]和a[i]),然后把每一对按b[i]在前、a[i]在后的顺序展开成平列表。zip(b, a)生成包含这些配对的迭代器,嵌套列表推导式负责把配对逐个拆解开。
如果keys是任意索引怎么办?
要是keys不是刚好和a的元素索引一一对应,比如想插入到任意位置,可以用functools.reduce一行实现:
from functools import reduce def insert_function(a, b, keys): return reduce(lambda res, idx_val: res[:idx_val[0]] + [idx_val[1]] + res[idx_val[0]:], sorted(zip(keys, b)), a.copy())
这里先把keys和b配对并按索引排序(避免插入顺序打乱位置),再用reduce逐个插入到对应位置。比如keys=[1,3]、b=[9,10]时,会返回[1,9,2,3,10,4]。
内容的提问来源于stack exchange,提问作者Nuri Taş
相关产品推荐
相关产品推荐

