我有这个清单:
newlis = [[6], [3], [4], [10], [9], [1], [2], [5], [7], [0], [8]]
我想合并每两个连续的子列表(无论它们是奇数还是偶数)。我试过这段代码:
while len(newlis) != 1:
lis1=[(a + b) for a, b in zip(newlis[::2], newlis[1::2])]
newlis=lis1
print newlis
结果是:[[6, 3], [4, 10], [9, 1], [2, 5], [7, 0]]
如何修改将打印[[6, 3], [4, 10], [9, 1], [2, 5], [7, 0], [8]]
的代码?
答案 0 :(得分:1)
您可以在{3}中使用itertools.izip_longest
(itertools.zip_longest
):
>>> from itertools import izip_longest
>>> [(a + b) if b else a for a, b in izip_longest(newlis[::2], newlis[1::2])]
[[6, 3], [4, 10], [9, 1], [2, 5], [7, 0], [8]]
此功能还接受fillvalue
,您可以使用>>> [(a + b) for a, b in izip_longest(newlis[::2], newlis[1::2],fillvalue=['**'])]
[[6, 3], [4, 10], [9, 1], [2, 5], [7, 0], [8, '**']]
来填充服装价值的错过值:
chain
另一个选择是使用islice
和>>> from itertools import islice,chain
>>> [list(chain.from_iterable(islice(newlis,i,i+2))) for i in range(0,len(newlis),2)]
[[6, 3], [4, 10], [9, 1], [2, 5], [7, 0], [8]]
:
<div id="tasks"><%= @like %></div>
答案 1 :(得分:0)
使用itertools.groupby
:
>>> [[w for _, q in k for w in q] for _, k in itertools.groupby(enumerate(newlis), lambda (a,b):a//2)]
[[6, 3], [4, 10], [9, 1], [2, 5], [7, 0], [8]]
答案 2 :(得分:0)
如果您不想导入任何库,可以使用这个简单的一行:
result = [sum(newlis[i:i+2], []) for i in range(0, len(newlis), 2)]