使用Python连接列表中的连续子列表对

时间:2015-08-16 16:50:05

标签: python list

如何将列表中的子列表成对组合? 例如:

list1 = [[1,2,3],[4,5],[6],[7,8],[9,10]]

结果将是:

[[1,2,3,4,5],[6,7,8],[9,10]]

8 个答案:

答案 0 :(得分:5)

您可以将zip_longest与填充值一起使用(如果您的列表包含奇数个子列表),以便在list1上压缩迭代器。通过zip生成器对象运行列表解析,可以连接连续的列表对:

>>> from itertools import zip_longest # izip_longest in Python 2.x
>>> x = iter(list1)
>>> [a+b for a, b in zip_longest(x, x, fillvalue=[])]
[[1, 2, 3, 4, 5], [6, 7, 8], [9, 10]]

答案 1 :(得分:3)

尝试使用列表推导(但要小心索引!)。它适用于具有偶数或奇数子列表的列表:

list1 = [[1, 2, 3], [4, 5], [6], [7, 8], [9, 10]]
n = len(list1)

[list1[i] + (list1[i+1] if i+1 < n else []) for i in xrange(0, n, 2)]
=> [[1, 2, 3, 4, 5], [6, 7, 8], [9, 10]]

答案 2 :(得分:1)

list1=[[1,2,3],[4,5],[6],[7,8],[9,10]]

length = len(list1)
new_list = [ list1[i]+list1[i+1] if i+1 < length 
                                 else [list1[i]] for i in range(0,length,2) ] 

print(new_list)

答案 3 :(得分:0)

>>> list1=[[1,2,3],[4,5],[6],[7,8],[9,10]]
>>> list1
[[1, 2, 3], [4, 5], [6], [7, 8], [9, 10]]

现在我们可以做到:

>>> test = [list1[0]+list1[1]]+[list1[2]+list1[3]]+list1[4]
>>> test
[[1, 2, 3, 4, 5], [6, 7, 8], 9, 10]
>>> 

我相信有更好的方法,但这是我能想到的方式!

答案 4 :(得分:0)

print([list(chain.from_iterable(list1[i:i+2]))
       for i in range(0, len(list1), 2)])
 [[1, 2, 3, 4, 5], [6, 7, 8], [9, 10]]

或没有islice:

{{1}}

答案 5 :(得分:0)

使用简单的循环:

list1=[[1,2,3],[4,5],[6],[7,8],[9,10]]

newlist = []

for i in range(0, len(list1), 2):
    newlist.append(list1[i] + list1[i+1])
if len(list1) % 2 > 0:
    newlist.append(list1[-1])

print newlist

答案 6 :(得分:0)

这是(我希望)一个正确的解决方案:

def pair_up(ls):
    new_list = []
    every_other1 = ls[::2]
    every_other2 = ls[1::2]

    for i in range(len(every_other2)):
        new_list.append(every_other1[i]+every_other2[i])

    if len(ls) % 2 == 1:
        new_list.append(ls[-1])

    return new_list

答案 7 :(得分:0)

使用删除第n个[-1]个奇数子列表来处理同一个列表:

for i in range(len(l)/2):#here we go only to last even item
    l[i]+=l[i+1]#adding odd sublist to even sublist
    l.pop(i+1)#removing even sublist