Python 将字符串作为公式中的文本读取
我希望能够执行以下代码:Python 将字符串作为公式中的文本读取,python,string,for-loop,text,Python,String,For Loop,Text,我希望能够执行以下代码: import numpy z=numpy.zeros(4) k="z[i-1]" for i in range(len(b)): z[i]=k 它将返回与以下内容相同的输出: z=numpy.zeros(4) for i in range(6): z[i]=z[i-1] 如果执行第一个代码块,则会收到预期的错误消息: File "<ipython-input-982-3ba4e617a74a>", line 1, in <mod
import numpy
z=numpy.zeros(4)
k="z[i-1]"
for i in range(len(b)):
z[i]=k
它将返回与以下内容相同的输出:
z=numpy.zeros(4)
for i in range(6):
z[i]=z[i-1]
如果执行第一个代码块,则会收到预期的错误消息:
File "<ipython-input-982-3ba4e617a74a>", line 1, in <module>
z[i]=(k)
ValueError: could not convert string to float: 'z[i-1]'
文件“”,第1行,在
z[i]=(k)
ValueError:无法将字符串转换为浮点:“z[i-1]”
如何将字符串中的文本传递到循环中,使其作为一个等式来运行,就好像字符串中的字符是手工键入的一样?按照以下操作:
import numpy
z=numpy.zeros(4)
k="z[i-1]"
for i in range(len(b)):
z[i]=eval(k)
但请注意,eval可能是一个安全问题:按以下步骤执行:
import numpy
z=numpy.zeros(4)
k="z[i-1]"
for i in range(len(b)):
z[i]=eval(k)
但请注意,eval可能是一个安全问题:我想您正在寻找 考虑:
>>> z = numpy.zeros(4)
>>> k = "10 + z[i-1]"
>>> for i in range(1, 4):
... z[i] = eval(k)
...
>>> z
array([ 0., 10., 20., 30.])
我将表达式稍微复杂一些,以便您可以看到有趣的输出。我想您正在寻找 考虑:
>>> z = numpy.zeros(4)
>>> k = "10 + z[i-1]"
>>> for i in range(1, 4):
... z[i] = eval(k)
...
>>> z
array([ 0., 10., 20., 30.])
我将表达式稍微复杂一些,这样您就可以看到有趣的输出。除此之外,生产代码中非常不鼓励使用eval,您也可以轻松定义一个函数,该函数根据数组和索引返回特定项:
def k(arr,idx):
return arr[idx-1]
for i in range(len(b)):
z[i]= k(z,i)
如果此规则需要应用于代码中的各个位置,则您可以编辑一个函数以将该逻辑应用于所需的所有位置。Other then
eval
这在生产代码中是非常不受欢迎的,您可以同样轻松地定义一个基于数组和索引返回特定项的函数:
def k(arr,idx):
return arr[idx-1]
for i in range(len(b)):
z[i]= k(z,i)
如果需要在代码中的各个位置应用此规则,则您可以编辑一个函数,以便在所有需要的位置应用该逻辑。在什么上下文中尝试执行此操作?
k
是否总是采用这种格式?一般的解决方案是使用eval()
,但它速度慢,并且对任意输入不安全。您在什么环境下尝试这样做?k
是否总是采用这种格式?一般的解决方案是使用eval()
,但它速度慢,并且对任意输入不安全。