我想了解如何将字符串列表转换为数字列表。如何将字符串列表转换为数值?
我有,通过该用户为x和y的值进入这样一个PHP形式:
X: [1,3,4]
Y: [2,4,5]
这些值被存储到数据库中作为VARCHAR处理。从那里,这些被称为python程序,应该使用它们作为数字(numpy)数组。但是,这些被称为纯字符串,这意味着无法对它们执行计算。有没有办法在处理之前将它们转换为数值数组,还是有其他的错误?
我想了解如何将字符串列表转换为数字列表。如何将字符串列表转换为数值?
我有,通过该用户为x和y的值进入这样一个PHP形式:
X: [1,3,4]
Y: [2,4,5]
这些值被存储到数据库中作为VARCHAR处理。从那里,这些被称为python程序,应该使用它们作为数字(numpy)数组。但是,这些被称为纯字符串,这意味着无法对它们执行计算。有没有办法在处理之前将它们转换为数值数组,还是有其他的错误?
您可以使用list comprehension与strip()和split()函数一起把它变成数字值。
x = '[1,3,4]'
new_x = [int(i) for i in x.strip('[]').split(',')]
new_x
[1, 3, 4]
使用int
s此列表,你认为合适,例如,将它们传递到numpy的等
from numpy import array
a = array(new_x)
a
array([1, 3, 4])
a * 4
array([ 4, 12, 16])
这里有一种方法:
>>> 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])
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])
这给出了错误: AttributeError:'模块'对象没有属性'数组' – khan
适合我 - 32位Python 2.7.2,numpy 1.5.1,在64位Windows 7专业版 –
如果我正确理解您的问题,您可以使用eval()
和compile()
内置函数来实现您的目标:
>>> lst_str = '[1,2,3]'
>>> lst_obj = compile(lst_str, '<string>', 'eval')
>>> eval(lst_obj)
[1, 2, 3]
请记住,以这种方式使用eval()
有潜在的危险,但是,除非你能验证输入。
'ast.literal_eval'更安全。 –
@PauloScardine,我会想象它一定是这样,但是直到我读到Hugh Bothwell的帖子时,我甚至都不知道它存在。尽管如此,'ast'显然直到2.6才被添加,所以'eval()'方法在旧版本中可能有一些用处。 –
解析字符串并将其拆分以形成数组。这并不困难。 [尝试一下](http://whathaveyoutried.com)。 – 2012-06-11 17:51:32