将单一列表分离成多个列表

22 阅读4分钟

假设我们有一个列表 asign,里面包含多个子列表,如下所示:

asign=[
[['2013-11-14', 52, None, None], ['2013-11-15', 74, None, None], ['2013-11-16', 189, None, None],['2013-11-17', 27, None, None], ['2013-11-18', 11, None, None], ['2013-11-19', 14, None, None],['2013-11-20', 0, None, None]],
[['2013-11-14', 129, None, None], ['2013-11-15', 113, None, None],['2013-11-16', 58, None, None], ['2013-11-17', 34, None, None], ['2013-11-18', 14, None, None],['2013-11-19', 13, None, None], ['2013-11-20', 0, None, None]],
[['2013-11-14', 56, None, None],['2013-11-15', 75, None, None], ['2013-11-16', 29, None, None], ['2013-11-17', 156, None, None],['2013-11-18', 46, None, None], ['2013-11-19', 85, None, None], ['2013-11-20', 6, None, None]],
[['2013-11-14', 111, None, None], ['2013-11-15', 227, None, None], ['2013-11-16', 166, None, None],['2013-11-17', 145, None, None], ['2013-11-18', 23, None, None], ['2013-11-19', 36, None, None],['2013-11-20', 1, None, None]], 
[['2013-11-14', 22, None, None], ['2013-11-15', 20, None, None],['2013-11-16', 13, None, None],['2013-11-17', 12, None, None], ['2013-11-18', 10, None, None],['2013-11-19', 2, None, None], ['2013-11-20', 6, None, None]], 
[['2013-11-14', 33, None, None],['2013-11-15', 28, None, None], ['2013-11-16', 35, None, None], ['2013-11-17', 14, None, None],['2013-11-18', 14, None, None], ['2013-11-19', 6, None, None], ['2013-11-20', 1, None, None]],
[['2013-11-14', 28, None, None], ['2013-11-15', 35, None, None], ['2013-11-16', 20, None, None],
['2013-11-17', 7, None, None], ['2013-11-18', 15, None, None], ['2013-11-19', 14, None, None],
['2013-11-20', 0, None, None]]  
]

我们想要将这个单一列表 asign 分离成多个列表,使其看起来如下所示:

[
['2013-11-14', 52, None, None, 129, None, None, 56, None, None, 111, None, None,
 22, None, None, 33, None, None, 28, None, None],
['2013-11-15', 74, None, None, 113, None, None, 75, None, None, 227, None, None, 20, None, None, 28, None, None,35, None, None],
['2013-11-16', 189, None, None, 58, None, None, 29, None, None,166, None, None, 13, None, None, 35, None, None, 20, None, None],
['2013-11-17', 27, None, None, 34, None, None, 156, None, None, 145, None, None, 12, None, None,14, None, None, 7, None, None],
['2013-11-18', 11, None, None, 14, None, None, 46, None, None, 23, None, None, 10, None, None, 14, None, None, 15, None, None],
['2013-11-19', 14, None, None, 13, None, None, 85, None, None, 36, None, None, 2, N
one, None, 6, None, None, 14, None, None],
['2013-11-20', 0, None, None, 0, None,None, 6, None, None, 1, None, None, 6, None, None, 1, None, None, 0, None, None]
]

2、解决方案

我们可以使用 Python 的 numpy 库来解决这个问题。首先,我们需要将 asign 转换成一个 numpy 数组。

import numpy as np
data = np.array(asign)

然后,我们可以使用 numpy.hstack() 函数来将这些子列表水平连接在一起。

np.hstack((data[0], data[1, :, 1:], data[2, :, 1:],
          data[3, :, 1:], data[4, :, 1:], data[5, :, 1:],
          data[6, :, 1:]))

这样,我们就得到了一个新的 numpy 数组,它包含了分离后的数据。

为了将其转换成一个列表,我们可以使用 tolist() 方法。

result = data.tolist()

现在,我们就得到了一个包含多个列表的列表,如下所示:

print(result)
[
['2013-11-14', 52, None, None, 129, None, None, 56, None, None, 111, None, None,
 22, None, None, 33, None, None, 28, None, None],
['2013-11-15', 74, None, None, 113, None, None, 75, None, None, 227, None, None, 20, None, None, 28, None, None,35, None, None],
['2013-11-16', 189, None, None, 58, None, None, 29, None, None,166, None, None, 13, None, None, 35, None, None, 20, None, None],
['2013-11-17', 27, None, None, 34, None, None, 156, None, None, 145, None, None, 12, None, None,14, None, None, 7, None, None],
['201