2

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 链接的问题中找到。

4

2 回答 2

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]
于 2013-03-01T10:29:24.717 回答
0

您可以使用减少:

>>> import operator
>>> reduce(operator.add, [(3,4),(1,2)])
(3, 4, 1, 2)
于 2013-03-01T10:29:35.737 回答