我明白了:
X = [['0.4,0,6'],['0.2,0,3'],['0.1,0,8']]
我想实现这个目标:
X = [[0.4,0,6],[0.2,0,3],[0.1,0,8]]
我需要进行更改,因为它会导致我出现ValueError:
array = np.array(array, dtype=dtype, order=order, copy=copy)
ValueError: invalid literal for float(): 0.1,0,8
有没有人知道如何进行更改?
答案 0 :(得分:1)
这样做是为了保留数据的float / int特性:
import ast
X = [['0.4,0,6'],['0.2,0,3'],['0.1,0,8']]
print([list(ast.literal_eval(e[0])) for e in X])
结果:
[[0.4, 0, 6], [0.2, 0, 3], [0.1, 0, 8]]
每个列表只有一个元素,包含一个元组。在sole元素上使用ast.literal_eval
会返回tuple
,转换为list
即可获得所需内容。
答案 1 :(得分:0)
这些子列表中有字符串,这使它有点混乱。在将每个项目转换为float
之前,您需要拆分:
>>> [[float(i) for i in lst[0].split(',')] for lst in X]
[[0.4, 0.0, 6.0], [0.2, 0.0, 3.0], [0.1, 0.0, 8.0]]
答案 2 :(得分:0)
您可以使用eval()
将它们从字符串转换为元组,并使用list()
制作元组列表:
a = [['0.4,0,6'],['0.2,0,3'],['0.1,0,8']]
b = []
for x in a:
b.append(list(eval(x[0])))
答案 3 :(得分:0)
您可以使用ast.literal_eval
:
import ast
X = [['0.4,0,6'],['0.2,0,3'],['0.1,0,8']]
l = [list(ast.literal_eval(i[0])) for i in X]
输出:
>>> l
[[0.4, 0, 6], [0.2, 0, 3], [0.1, 0, 8]]
答案 4 :(得分:0)
为了避免文本的脆弱解析和危险的eval()
,您可以使用ast.literal_eval()
:
>>> X = [['0.4,0,6'],['0.2,0,3'],['0.1,0,8']]
>>> import ast
>>> X=[ast.literal_eval(i[0]) for i in X]
>>> X
[(0.4, 0, 6), (0.2, 0, 3), (0.1, 0, 8)]
>>>