如何从包含17个元素的List转到更多元素

Edo*_*eri 1 python python-2.7

我是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'
]
Run Code Online (Sandbox Code Playgroud)

有17个元素.每个元素都有4个'子元素',我希望有一个包含17X4元素的列表.

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

我怎样才能做到这一点?

Wil*_*sem 8

那么数字用空格分隔.根据某个分割字符串将字符串转换为字符串str.split(..)正在做什么.

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

[list(x.split()) for x in mylist]
Run Code Online (Sandbox Code Playgroud)

这使:

>>> [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']]
Run Code Online (Sandbox Code Playgroud)

请注意,这里的元素是str英格斯,如果你想floatS,你可以这样写:

[[float(y) for y in x.split()] for x in mylist]
Run Code Online (Sandbox Code Playgroud)

这使:

>>> [[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]]
Run Code Online (Sandbox Code Playgroud)

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

[float(y) for x in mylist for y in x.split()]
Run Code Online (Sandbox Code Playgroud)

产生:

>>> [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]
Run Code Online (Sandbox Code Playgroud)

如果你想批量进行矩阵向量计算,那么通常会使用类似的库numpy.您可以按如下方式导入numpy中的数据:

import numpy as np

np.fromstring(' '.join(mylist),sep=' ')
Run Code Online (Sandbox Code Playgroud)

生产:

>>> 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])
Run Code Online (Sandbox Code Playgroud)

[1] Python 2教程的"列表理解"部分