如何将字符串列表转换为数值?

时间:2012-06-11 16:35:19

标签: python string-parsing

我想了解如何将字符串列表转换为数字列表。

我有一个php表单,用户通过该表单输入x和y的值,如下所示:

X: [1,3,4]
Y: [2,4,5]

这些值作为varchars存储在数据库中。从那里,这些由python程序调用,该程序应该将它们用作数字(numpy)数组。但是,这些被称为普通字符串,这意味着无法对它们执行计算。有没有办法在处理之前将它们转换为数值数组,还是有其他错误的东西?

4 个答案:

答案 0 :(得分:2)

您可以使用list comprehension以及strip()split()功能将其转换为数字值。

x = '[1,3,4]'
new_x = [int(i) for i in x.strip('[]').split(',')]
new_x
[1, 3, 4]

根据您的需要使用此int列表,例如,将它们传递给numpy等。

from numpy import array

a = array(new_x)
a
array([1, 3, 4])

a * 4
array([ 4, 12, 16])

答案 1 :(得分:1)

这是一种方式:

>>> import numpy
>>> block = "[1,3,4]"
>>> block = block.strip("[]")
>>> a = numpy.fromstring(block, sep=",", dtype=int)
>>> a
array([1, 3, 4])
>>> a*2
array([2, 6, 8])

答案 2 :(得分:0)

import ast
import numpy as np

def parse_array(s):
    return np.array(ast.literal_eval(s))

s = '[1,2,3]'
data = parse_array(s)    # -> numpy.array([1,2,3])

答案 3 :(得分:0)

如果我正确理解您的问题,您可以使用eval()compile()内置函数来实现您的目标:

>>> lst_str = '[1,2,3]'
>>> lst_obj = compile(lst_str, '<string>', 'eval')
>>> eval(lst_obj)
[1, 2, 3]

请注意,以这种方式使用eval()可能不安全,除非您可以验证输入。