-3

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

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

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

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

4

4 回答 4

2

您可以使用列表推导以及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])
于 2012-06-11T16:37:14.020 回答
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])
于 2012-06-11T16:43:27.337 回答
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])
于 2012-06-11T16:48:40.997 回答
0

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

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

但是请记住,eval()以这种方式使用可能是不安全的,除非您可以验证输入。

于 2012-06-11T16:49:14.897 回答