将字符串列表(使用空格而不是逗号)转换为列表列表

2024-04-25 19:56:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下字符串:

'[[ 0.03694573  0.01084746  0.01306414  0.00499198  0.00307188]\r\n [ 0.03780498  0.02610241  0.00967986  0.02228694 -0.01153102]\r\n [ 0.03837708  0.02111896  0.01370878 -0.00136839  0.01906253]\r\n [ 0.03490672 -0.02791057  0.08824896 -0.01991765  0.01964361]\r\n [ 0.0811892   0.28361901  0.21539196 -0.00259571  0.28737829]\r\n [ 0.20022041  0.16184418  0.25939959  0.00546446  0.36415219]\r\n [ 0.22920615  0.27439767  0.36991198  0.00624375  0.39911759]]'

如您所见,它由一系列列表组成。但是,列表中的每个元素都由制表符而不是逗号分隔,因此ast.literal_eval()不起作用。有人知道如何最好地将其转换为列表列表吗

BJR ​


Tags: 字符串元素列表evalast制表符逗号literal
3条回答

这是一个粗略的想法。可以做得更小

input = '[[ 0.03694573  0.01084746  0.01306414  0.00499198  0.00307188]\r\n [ 0.03780498  0.02610241  0.00967986  0.02228694 -0.01153102]\r\n [ 0.03837708  0.02111896  0.01370878 -0.00136839  0.01906253]\r\n [ 0.03490672 -0.02791057  0.08824896 -0.01991765  0.01964361]\r\n [ 0.0811892   0.28361901  0.21539196 -0.00259571  0.28737829]\r\n [ 0.20022041  0.16184418  0.25939959  0.00546446  0.36415219]\r\n [ 0.22920615  0.27439767  0.36991198  0.00624375  0.39911759]]'

input = input.replace('\r\n', ',')

array_of_arrays = input.split(',')
array_of_strings = []
for arr in array_of_arrays:
     _arr = arr.replace('[', '')
     _arr = _arr.replace(']', '')
     array_of_strings.append(_arr)
result = []
for arr in array_of_strings:
     num_strings = arr.split()
     num_arr = [float(x) for x in num_strings]
     result.append(num_arr)

print(result) 

这里有一种使用re.sub的方法:

import re
literal_eval(','.join(re.sub(r'(?<=\d)(\s+)(?=-?\d)', ',', s).splitlines()))

[[0.03694573, 0.01084746, 0.01306414, 0.00499198, 0.00307188],
 [0.03780498, 0.02610241, 0.00967986, 0.02228694, -0.01153102],
 [0.03837708, 0.02111896, 0.01370878, -0.00136839, 0.01906253],
 [0.03490672, -0.02791057, 0.08824896, -0.01991765, 0.01964361],
 [0.0811892, 0.28361901, 0.21539196, -0.00259571, 0.28737829],
 [0.20022041, 0.16184418, 0.25939959, 0.00546446, 0.36415219],
 [0.22920615, 0.27439767, 0.36991198, 0.00624375, 0.39911759]]

修改字符串,直到它可以被^{}解释。基本上,这意味着在需要的地方添加一个“,”

如果您的字符串被称为data

import ast
data = data.replace('  ', ',').replace('\r\n ', ',')
result = ast.literal_eval(dat2)

现在result将包含您的列表

我不确定你那里是否有空格或制表符。如果您有选项卡,则必须将' '替换为'\t\t'

相关问题 更多 >