如何将列表中的子列表成对组合? 例如:
list1 = [[1,2,3],[4,5],[6],[7,8],[9,10]]
结果将是:
[[1,2,3,4,5],[6,7,8],[9,10]]
答案 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