如何通过非排序插入方式,合并两列表得到交替有序结果?
Hey there! 想要把两个列表按照这种交替插入的方式合并成l3 = [1,2,3,4,5,6,7],我这里有几个实用的方案,你可以按需选择:
方法一:手动逐个插入(适合元素数量少的场景)
因为你的列表元素不多,直接用insert()方法指定位置插入就行,非常直观:
l1 = [1,3,5,7] l2 = [2,4,6] # 依次插入l2的元素到l1的对应位置 l1.insert(1, l2[0]) # 插入2到索引1的位置 l1.insert(3, l2[1]) # 插入4到索引3的位置(此时l1已经是[1,2,3,5,7],索引3对应3之后的位置) l1.insert(5, l2[2]) # 插入6到索引5的位置 l3 = l1 print(l3) # 输出: [1,2,3,4,5,6,7]
方法二:循环批量插入(通用型,适合元素多的情况)
如果你的列表后续可能变长,用循环自动处理插入位置会更省心。观察规律:l2的第i个元素(从0开始计数)需要插入到l1的2*i +1位置(插入后列表长度会变化,但因为我们从左到右依次插入,这个位置公式刚好适用):
l1 = [1,3,5,7] l2 = [2,4,6] # 先复制l1,避免修改原列表(如果不需要保留原l1,可以直接操作l1) l3 = l1.copy() for i in range(len(l2)): l3.insert(2*i + 1, l2[i]) print(l3) # 输出: [1,2,3,4,5,6,7]
方法三:Zip拼接+展开(更简洁的写法)
利用zip()把l1的前3个元素和l2的元素两两配对,再把配对后的元组展开,最后加上l1的最后一个元素,一行代码就能搞定:
l1 = [1,3,5,7] l2 = [2,4,6] # 列表推导式版本,简洁明了 l3 = [x for pair in zip(l1[:-1], l2) for x in pair] + [l1[-1]] print(l3) # 输出: [1,2,3,4,5,6,7] # 或者用循环展开,可读性更强 l3 = [] for a, b in zip(l1[:-1], l2): l3.extend([a, b]) l3.append(l1[-1]) print(l3)
小提示
这几种方法都适用于l1的长度比l2多1的情况(也就是你的需求场景),如果后续列表长度关系变化,只需要微调逻辑就能适配~
内容的提问来源于stack exchange,提问作者greatunarine1
相关产品推荐
相关产品推荐

