Skip to main content
 首页 » 编程设计

python之如何从包含 17 个元素的列表到更多元素

2025年05月04日10zengkefu

我是 Phyton 的新手。我有这个列表:

[ 
    '0 214.0 1.55E-02 233.6', 
    '10 205.0 6.470E-03 228.5', 
    '20 188.3 2.630E-03 218.8', 
    '30 175.0 9.800E-04 211.0', 
    '40 162.4 3.400E-04 203.6', 
    '50 152.2 1.080E-04 197.0', 
    '60 144.2 3.180E-05 191.6', 
    '70 139.5 8.730E-06 188.4', 
    '80 139.0 2.290E-06 187.9', 
    '90 139.0 6.010E-07 188.2', 
    '100 139.0 1.590E-07 188.1', 
    '110 149.4 4.140E-08 195.5', 
    '120 159.7 1.190E-08 202.5', 
    '130 170.0 3.760E-09 208.6', 
    '140 245.1 1.090E-09 251.9', 
    '150 288.6 4.730E-10 275.5' 
] 

有 17 个元素。每个元素都有 4 个“子元素”,我想要一个包含 17X4 元素的列表。

即,每个数字 (0, 214.0, 1.55E-02, 233.6) 都应该是我列表中的一个元素。

我该怎么做?

请您参考如下方法:

好吧,数字由空格分隔。 str.split(..) 正在做的就是将字符串按照一定的分割字符串变成字符串。

所以你可以使用list comprehension [1]:

[list(<b>x.split()</b>) for x in mylist]

给出:

>>> [list(x.split()) for x in mylist] 
[['0', '214.0', '1.55E-02', '233.6'], ['10', '205.0', '6.470E-03', '228.5'], ['20', '188.3', '2.630E-03', '218.8'], ['30', '175.0', '9.800E-04', '211.0'], ['40', '162.4', '3.400E-04', '203.6'], ['50', '152.2', '1.080E-04', '197.0'], ['60', '144.2', '3.180E-05', '191.6'], ['70', '139.5', '8.730E-06', '188.4'], ['80', '139.0', '2.290E-06', '187.9'], ['90', '139.0', '6.010E-07', '188.2'], ['100', '139.0', '1.590E-07', '188.1'], ['110', '149.4', '4.140E-08', '195.5'], ['120', '159.7', '1.190E-08', '202.5'], ['130', '170.0', '3.760E-09', '208.6'], ['140', '245.1', '1.090E-09', '251.9'], ['150', '288.6', '4.730E-10', '275.5']] 

注意这里的元素是strings,如果要float可以这样写:

[[<b>float(y)</b> for y in x.split()] for x in mylist]

给出:

>>> [[float(y) for y in x.split()] for x in mylist] 
[[0.0, 214.0, 0.0155, 233.6], [10.0, 205.0, 0.00647, 228.5], [20.0, 188.3, 0.00263, 218.8], [30.0, 175.0, 0.00098, 211.0], [40.0, 162.4, 0.00034, 203.6], [50.0, 152.2, 0.000108, 197.0], [60.0, 144.2, 3.18e-05, 191.6], [70.0, 139.5, 8.73e-06, 188.4], [80.0, 139.0, 2.29e-06, 187.9], [90.0, 139.0, 6.01e-07, 188.2], [100.0, 139.0, 1.59e-07, 188.1], [110.0, 149.4, 4.14e-08, 195.5], [120.0, 159.7, 1.19e-08, 202.5], [130.0, 170.0, 3.76e-09, 208.6], [140.0, 245.1, 1.09e-09, 251.9], [150.0, 288.6, 4.73e-10, 275.5]] 

请注意,这些是 float 列表的列表。如果您想要一个平面列表,您可以使用:

[float(y) for x in mylist for y in x.split()] 

生成:

>>> [float(y) for x in mylist for y in x.split()] 
[0.0, 214.0, 0.0155, 233.6, 10.0, 205.0, 0.00647, 228.5, 20.0, 188.3, 0.00263, 218.8, 30.0, 175.0, 0.00098, 211.0, 40.0, 162.4, 0.00034, 203.6, 50.0, 152.2, 0.000108, 197.0, 60.0, 144.2, 3.18e-05, 191.6, 70.0, 139.5, 8.73e-06, 188.4, 80.0, 139.0, 2.29e-06, 187.9, 90.0, 139.0, 6.01e-07, 188.2, 100.0, 139.0, 1.59e-07, 188.1, 110.0, 149.4, 4.14e-08, 195.5, 120.0, 159.7, 1.19e-08, 202.5, 130.0, 170.0, 3.76e-09, 208.6, 140.0, 245.1, 1.09e-09, 251.9, 150.0, 288.6, 4.73e-10, 275.5] 

如果您想批量进行矩阵 或向量 计算,通常会使用像numpy 这样的库。您可以按如下方式在 numpy 中导入数据:

<b>import numpy as np</b> 
 
np.fromstring(' '.join(mylist),sep=' ')

制作:

>>> np.fromstring(' '.join(mylist),sep=' ') 
array([  0.00000000e+00,   2.14000000e+02,   1.55000000e-02, 
         2.33600000e+02,   1.00000000e+01,   2.05000000e+02, 
         6.47000000e-03,   2.28500000e+02,   2.00000000e+01, 
         1.88300000e+02,   2.63000000e-03,   2.18800000e+02, 
         3.00000000e+01,   1.75000000e+02,   9.80000000e-04, 
         2.11000000e+02,   4.00000000e+01,   1.62400000e+02, 
         3.40000000e-04,   2.03600000e+02,   5.00000000e+01, 
         1.52200000e+02,   1.08000000e-04,   1.97000000e+02, 
         6.00000000e+01,   1.44200000e+02,   3.18000000e-05, 
         1.91600000e+02,   7.00000000e+01,   1.39500000e+02, 
         8.73000000e-06,   1.88400000e+02,   8.00000000e+01, 
         1.39000000e+02,   2.29000000e-06,   1.87900000e+02, 
         9.00000000e+01,   1.39000000e+02,   6.01000000e-07, 
         1.88200000e+02,   1.00000000e+02,   1.39000000e+02, 
         1.59000000e-07,   1.88100000e+02,   1.10000000e+02, 
         1.49400000e+02,   4.14000000e-08,   1.95500000e+02, 
         1.20000000e+02,   1.59700000e+02,   1.19000000e-08, 
         2.02500000e+02,   1.30000000e+02,   1.70000000e+02, 
         3.76000000e-09,   2.08600000e+02,   1.40000000e+02, 
         2.45100000e+02,   1.09000000e-09,   2.51900000e+02, 
         1.50000000e+02,   2.88600000e+02,   4.73000000e-10, 
         2.75500000e+02]) 

[1] Python 2 Tutorial's section on "list comprehensions"