我有两个列表如下:
l1 = [1,3,5,7]
和l2 = [2,4,6]
如何获得此输出l3 = [1,2,3,4,5,6,7]
,即从l2插入第一个条目作为l1中的第二个条目,依此类推。提前致谢
答案 0 :(得分:0)
如果不假设输入列表已排序,或者要求对输出进行排序,则可以使用itertools
进行排序。
from itertools import zip_longest, chain
l1 = [1,3,5,7]
l2 = [2,4,6]
res = list(filter(None, chain.from_iterable(zip_longest(l1, l2))))
# [1, 2, 3, 4, 5, 6, 7]
<强>解释强>
zip_longest
迭代成对不等长的列表。chain.from_iterable
有效地链接列表列表。filter(None, ...)
删除最终的None
元素。答案 1 :(得分:0)
这是一种依赖于输入列表的方法,这些输入列表是按照您的示例的交替顺序预先排序的,这样您实际上想要插入它们,而不是进行任何类型的排序合并。
并且值None
永远不会在列表中作为真值。
In [12]: from itertools import chain, ifilter, izip_longest
In [13]: list(ifilter(lambda x: x is not None, chain(*izip_longest(l1, l2))))
Out[13]: [1, 2, 3, 4, 5, 6, 7]