【发布时间】:2019-01-31 16:56:20
【问题描述】:
扁平化列表列表是一个众所周知的问题,但是如何以最 pythonic 的方式扁平化 列表列表?我的最终目标是创建一个 numpy 数组,如下所示:
[In]: mylist = [[[1,2,3], [4]], [[5,6], [7,8]]]
[Out]: array([[1, 2, 3, 4],
[5, 6, 7, 8]])
但即使只是完全展平成一个长列表也可以(无论如何都可以很容易地转换为正确形状的数组)。典型的输出数组将具有维度 (10000, 10),因此循环遍历待处理的行非常低效。我们将不胜感激所有想法!
(编辑)我能想到的最佳解决方案:
import itertools
for i in range(len(mylist)):
mylist[i] = list(itertools.chain.from_iterable(mylist[i]))
np.array(mylist)
【问题讨论】:
-
只是为了理解问题,你怎么能有一个循环解决方案来解决你的示例案例?
-
其实很多乍一看很诱人的解决方案都返回
array([list([1, 2, 3]), list([4]), list([5, 6]), list([7, 8])], dtype=object) -
这也是我的最爱之一:stackoverflow.com/a/10632307/7919597
-
list(map(list, map(itertools.chain.from_iterable, mylist)))?
标签: python numpy optimization itertools flatten