Python从列表列表发出新列表列表

时间:2019-09-19 07:52:49

标签: python python-3.x list

我要打开列表清单

 lst1 = [[0.0  , 0.588, 0.639, 0.732, 0.484, 1.0],
         [0.0  , 0.319, 0.688, 0.905, 0.451, 1.0],
         [0.0  , 0.817, 0.653, 0.743, 0.625, 1.0],
         [0.0  , 0.667, 0.019, 0.837, 0.386, 1.0],
         [0.177, 0.321, 0.0  , 0.016, 0.125, 1.0],
         [0.067, 1.0  , 0.277, 0.0  , 0.979]]

进入此列表列表

lst2 = [[0.0  , 0.0  , 0.0  , 0.0  , 0.177, 0.067],
        [0.588, 0.319, 0.817, 0.667, 0.321, 1.0  ],
        [0.639, 0.688, 0.653, 0.019, 0.0  , 0.277],
        [0.732, 0.905, 0.743, 0.837, 0.016, 0.0  ],
        [0.484, 0.451, 0.625, 0.386, 0.125, 0.979]]

使用此代码

lst1 = [[(x-min(l))/(max(l)-min(l)) for x in l] for l in col_list_filter]
lst2 = [list(items) for items in zip(*norm_col_list)]

col_list_filter只是规范化之前的原始列表。

第一个列表包含6个列表,第二个列表包含5个,我还需要第二个列表也显示6个。我猜想这与第一个列表中的最后一个列表只有5个值,而其余的只有6个。

此数据最初是从csv文件导入的,具有一些空白值,这些值被转换为None并在对数据进行规范化时将其删除(因为它在0.0-1.0以上),因为将其保存在其中会一直导致错误,因此没有必要对于计算,我将在以后的步骤中进行。

1 个答案:

答案 0 :(得分:2)

  

第一个笑声有6个列表,第二个笑声有5个列表,我需要第二个   清单也显示6。我猜想它与最后一个列表有关   第一个笑声只有5个值,其余的只有6个。

实际上,

zip仅在最短列表中才会拉在一起。如果您也需要保留更长的列表,请按照文档中的建议使用itertools.zip_longest

>>> list_of_lists = [[1, 2, 3],
...                  [4, 5, 6],
...                  [7, 8]]
>>> [list(l) for l in zip(*list_of_lists)]
[[1, 4, 7], [2, 5, 8]]

>>> from itertools import zip_longest
>>> [list(l) for l in zip(*list_of_lists)]
[[1, 4, 7], [2, 5, 8], [3, 6, None]

>>> [list(l) for l in zip(*list_of_lists, fillvalue=0.0)]
[[1, 4, 7], [2, 5, 8], [3, 6, 0.0]

或者,值得研究一些流行的Python处理数据的软件包,例如pandasnumpy

我个人最熟悉numpy:

>>> import numpy as np
>>> list_of_lists = np.array([[1, 2, 3],
...                           [4, 5, 6],
...                           [7, 8, 0]])
>>> X = list_of_lists.T
>>> X
array([[1, 4, 7],
       [2, 5, 8],
       [3, 6, 0]])
>>> X*3 + 10
array([[13, 22, 31],
       [16, 25, 34],
       [19, 28, 37]])