zip(*[iter(s)]*n)的反向操作是什么
把一个列表分成相等的块可以用 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
你可以使用 reduce 这个方法:
>>> import operator
>>> reduce(operator.add, [(3,4),(1,2)])
(3, 4, 1, 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]