2012-06-11 16 views
-3

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

我有,通过该用户为x和y的值进入这样一个PHP形式:

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

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

+1

解析字符串并将其拆分以形成数组。这并不困难。 [尝试一下](http://whathaveyoutried.com)。 – 2012-06-11 17:51:32

回答

2

您可以使用list comprehensionstrip()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]) 
+0

谢谢你们。但事情是,这个结果数组不能与任何其他数组相乘或添加。我想要做的事情就是能够像正常的数组一样进行繁殖和添加。 :/ – khan

+0

我会的。我将在今天发布我的完整代码段并发布代码。让我们看看这是否可以解决。 – khan

+0

@khan我的解决方案给你的数字,所以我不太清楚你在找什么。我会看看你更新的问题。 – Levon

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]) 
+0

它仍然作为一个字符串返回。我的观点是它应该作为数值数组返回。例如: >>>一个= numpy.array([2,3,4]) 现在,当我们做一个* 2: >>>一个* 2 >>>阵列([4,5 6,8]) 这是理想的。我希望这种情况发生在我的字符串中,但迄今为止无法这样做。 :/ – khan

+0

什么?这根本不是一个字符串。这是一个numpy数组。我已经更新了答案,也许更清楚发生了什么事情。 – jterrace

+0

对不起。我的意思是说,它是作为一个字符数组而返回的,而不是一个数组实体,它们有能力加起来或乘以另一个数组,如矩阵。 – khan

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]) 
+0

这给出了错误: AttributeError:'模块'对象没有属性'数组' – khan

+0

适合我 - 32位Python 2.7.2,numpy 1.5.1,在64位Windows 7专业版 –

0

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

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

请记住,以这种方式使用eval()有潜在的危险,但是,除非你能验证输入。

+1

'ast.literal_eval'更安全。 –

+0

@PauloScardine,我会想象它一定是这样,但是直到我读到Hugh Bothwell的帖子时,我甚至都不知道它存在。尽管如此,'ast'显然直到2.6才被添加,所以'eval()'方法在旧版本中可能有一些用处。 –