从itertools.chain对象获取一个数组

时间:2014-11-10 22:05:53

标签: python itertools

假设我有list_of_numbers = [[1, 2], [3], []],我想要更简单的对象列表对象x = [1, 2, 3]

遵循this related solution的逻辑,我做

list_of_numbers = [[1, 2], [3], []]
import itertools
chain = itertools.chain(*list_of_numbers)

不幸的是,chain并不是我想要的,因为(例如)在控制台上运行chain会返回<itertools.chain object at 0x7fb535e17790>

功能f是什么功能,如果我执行x = f(chain)然后在控制台输入x,我会[1, 2, 3]

更新:实际上我最终需要的结果是array([1, 2, 3])。我在所选答案的评论中添加了一行来解决这个问题。

3 个答案:

答案 0 :(得分:3)

list。如果你list(chain)它应该工作。但是这只是用于调试目的,一般来说效率低下。

答案 1 :(得分:3)

如果你的最终目标是获得一个Numpy数组,那么你应该在这里使用numpy.fromiter

>>> import numpy as np
>>> from itertools import chain
>>> list_of_numbers = [[1, 2], [3], []]
>>> np.fromiter(chain(*list_of_numbers), dtype=int)
array([1, 2, 3])
>>> list_of_numbers = [[1, 2]*1000, [3]*1000, []]*1000
>>> %timeit np.fromiter(chain(*list_of_numbers), dtype=int)
10 loops, best of 3: 103 ms per loop
>>> %timeit np.array(list(chain(*list_of_numbers)))
1 loops, best of 3: 199 ms per loop

答案 2 :(得分:0)

您可以使用list(chain)