以交替顺序组合python中不同长度的众多列表

时间:2013-12-01 23:13:53

标签: python list

如果我有几个列表

我能够将列表1与列表2结合起来,但是,我还没有成功地将其他列表组合起来。

def alternator():
    iets = []
    for i in range(len(list2)): 
        something += [list1[i]]
        something +=[list2[i]]
    result = something
    result_weaver(result)

def result(x):
    list31 = list3
    if len(list3) < len(x) :
        while len(list31) != len(x):
            list31 += '-'

我决定添加' - '以确保两个列表的长度相等,因此for循环可以起作用。

有没有人对如何编程有更好的想法?

1 个答案:

答案 0 :(得分:6)

在此使用itertools.zip_longest()

try:
    from itertools import zip_longest
except ImportError:
    # Python 2
    from itertools import izip_longest as zip_longest

def alternate(list1, list2):
    return [v for v in sum(zip_longest(list1, list2), ()) if v is not None]

zip_longest()调用会添加None个占位符(类似于您自己尝试添加-个字符),我们需要在压缩后再次从sum()输出中删除。

演示:

>>> alternate(list1, list2)
['1', '5', '2', '6', '3', '7', '8']
>>> alternate(alternate(list1, list2), list3)
['1', '9', '5', '2', '6', '3', '7', '8']