拉链对面(* [iter(s)] * n)

时间:2013-03-01 10:27:15

标签: python iterator

使用zip(*[iter(s)]*n)成语巧妙地将列表分成相等的块。是否有一种很好的解除它的方法?

例如,如果我有以下代码:

>>> s = [3,4,1,2]
>>> zip(*[iter(s)]*2)
[(3, 4), (1, 2)]

是否有一些函数func([(3,4),(1,2)]会产生[3,4,1,2]作为输出?

编辑:

时间和更多解决方案可以在下面的Dominic Kexel链接的问题中找到。

2 个答案:

答案 0 :(得分:3)

itertools.chain.from_iterable

>>> import itertools
>>> s = [(3, 4), (1, 2)]
>>> list(itertools.chain.from_iterable(s))
[3, 4, 1, 2]

但是你也可以使用嵌套列表理解。

>>> s = [(3, 4), (1, 2)]
>>> [i for sub in s for i in sub]
[3, 4, 1, 2]

答案 1 :(得分:0)

您可以使用reduce:

>>> import operator
>>> reduce(operator.add, [(3,4),(1,2)])
(3, 4, 1, 2)