我在Python工作,目前我的列表看起来像
['001 2.4600 0.46 2.36E+003 86.66 16.77 0.33 1.32E+003 74.41 17.61 0.40 2.21E+003 87.39 22.07',
'002 10.310 0.38 2.95E+002 76.88 4.53 0000 000000000 00000 0000 0.34 2.62E+002 97.36 4.41',
'003 74.840 0.63 5.07E+002 64.63 4.03 0.57 4.15E+002 61.96 3.99 0.63 5.43E+002 64.67 5.16',
...
依此类推,还有更多元素。列表的每个元素都是一个字符串,包含各种图形,它们之间有空格。即,如上所述,第一个元素具有001,2.4600,0.46等等。
关键是我想将列表中的每个元素转换为数组的一行。目的是让一个大型数组给我所有信息,这些信息目前只是由列表中字符串内的空格分隔的数字。
我确定我可以使用内置数组模块来完成此操作,但我无法弄清楚如何。
有什么想法吗?希望问题很清楚。
答案 0 :(得分:3)
假设您希望在列表的最终列表中使用浮点数,请尝试以下操作:
>>> data = ['001 2.4600 0.46 2.36E+003 86.66 16.77 0.33 1.32E+003 74.41 17.61 0.40 2.21E+003 87.39 22.07', '002 10.310 0.38 2.95E+002 76.88 4.53 0000 000000000 00000 0000 0.34 2.62E+002 97.36 4.41', '003 74.840 0.63 5.07E+002 64.63 4.03 0.57 4.15E+002 61.96 3.99 0.63 5.43E+002 64.67 5.16']
>>> [list(map(float, row.split())) for row in data]
[[1.0, 2.46, 0.46, 2360.0, 86.66, 16.77, 0.33, 1320.0, 74.41, 17.61, 0.4, 2210.0, 87.39, 22.07], [2.0, 10.31, 0.38, 295.0, 76.88, 4.53, 0.0, 0.0, 0.0, 0.0, 0.34, 262.0, 97.36, 4.41], [3.0, 74.84, 0.63, 507.0, 64.63, 4.03, 0.57, 415.0, 61.96, 3.99, 0.63, 543.0, 64.67, 5.16]]
map
只是说'对此列表中的所有内容执行此功能(float()
)(split()
的结果,这是一个字符串列表)'。在Python 3中它返回一个迭代器,因此我们必须要求它的list()
。使用for循环或列表理解而不是map通常会更好,但在这种情况下它很方便。
答案 1 :(得分:2)
您使用array
模块的想法可能是虚假的,因为array.array
对象is, essentially, a list
with constrained data type。您不能对它们使用矢量化操作。此外,array.array
是一维对象。
也就是说,您可能想要使用numpy
module,其array
对象是一个多维数组,您可以随意操作。
# idiomatic manner of importing numpy
import numpy as np
data = ['1 2 3.', '4. 5 8']
arraydata = np.array([[float(n) for n in row.split()] for row in data])
print arraydata
# [[ 1. 2. 3.]
# [ 4. 5. 8.]]
答案 2 :(得分:1)
希望我理解正确
res = []
for row in my_list:
res.append(list(map(float, row.split())))
这里你将有一个字符串格式的值矩阵。添加了转化
答案 3 :(得分:0)
假设您的数据存储在您可以使用的名为数据的列表中
data =[[int(el) for el in string.split(' ')] for string in data]