在列表中插入条目而不对输出进行排序

时间:2018-03-24 00:01:34

标签: python

我有两个列表如下:

l1 = [1,3,5,7]l2 = [2,4,6]

如何获得此输出l3 = [1,2,3,4,5,6,7],即从l2插入第一个条目作为l1中的第二个条目,依此类推。提前致谢

2 个答案:

答案 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]