使用Python将列表中的字符串更改为整数

时间:2016-10-25 16:15:14

标签: python python-2.7 numpy

我明白了:

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

有没有人知道如何进行更改?

5 个答案:

答案 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)]
>>>