Python以交替的方式组合了两个不等长的列表

时间:2014-08-08 18:13:50

标签: python list python-2.7 alternation

我有两个列表,我希望以交替方式组合它们,直到一个用完,然后我想继续添加较长列表中的元素。

阿卡。

list1 = [a,b,c]

list2 = [v,w,x,y,z]

result = [a,v,b,w,c,x,y,z]

与此问题类似(Pythonic way to combine two lists in an alternating fashion?),除了这些问题,列表在第一个列表用完后停止合并:(。

4 个答案:

答案 0 :(得分:5)

您可能对此itertools recipe

感兴趣
def roundrobin(*iterables):
    "roundrobin('ABC', 'D', 'EF') --> A D E B F C"
    # Recipe credited to George Sakkis
    pending = len(iterables)
    nexts = cycle(iter(it).next for it in iterables)
    while pending:
        try:
            for next in nexts:
                yield next()
        except StopIteration:
            pending -= 1
            nexts = cycle(islice(nexts, pending))

例如:

>>> from itertools import cycle, islice
>>> list1 = list("abc")
>>> list2 = list("uvwxyz")
>>> list(roundrobin(list1, list2))
['a', 'u', 'b', 'v', 'c', 'w', 'x', 'y', 'z']

答案 1 :(得分:4)

以下是优秀toolz

中较简单的版本
>>> interleave([[1,2,3,4,5,6,7,],[0,0,0]])
[1, 0, 2, 0, 3, 0, 4, 5, 6, 7]

答案 2 :(得分:1)

我的解决方案:

result = [i for sub in zip(list1, list2) for i in sub]

编辑:问题指定较长的列表应该在较短列表的末尾继续,这个答案这样做。

答案 3 :(得分:1)

您可以使用普通map和列表理解:

>>> [x for t in map(None, a, b) for x in t if x]
['a', 'v', 'b', 'w', 'c', 'x', 'y', 'z']