假设我有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])
。我在所选答案的评论中添加了一行来解决这个问题。
答案 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)
。