如何在 Python 中完全扁平化列表?



扁平化列表列表是一个众所周知的问题,但是如何以最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)

一种可能性是使用numpy.append

import numpy as np
rows = [[[1, 2, 3], [4]], [[5, 6], [7, 8]]]
result = np.array([np.append(value[0], value[1:]) for value in rows])
print(result)

输出

[[1 2 3 4]
[5 6 7 8]]

函数numpy.append平展值 [1:]。一种选择是使用concatenateravel

rows = [[[1], [2], [3]], [[4], [5], [6]]]
result = np.array([np.concatenate(value).ravel() for value in rows])
print(result)

输出

[[1 2 3]
[4 5 6]]

concatenate函数联接数组序列,np.ravel返回一个连续的平展数组。您可以通过 np.flatten 更改np.ravel

最新更新