Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 创建未知数量的编程定义变量_Python_Variables_Recursion_Sympy - Fatal编程技术网

Python 创建未知数量的编程定义变量

Python 创建未知数量的编程定义变量,python,variables,recursion,sympy,Python,Variables,Recursion,Sympy,我有一个递归函数,它可以产生一个难以知道的表达式数量,每个表达式都需要一个新的变量乘以它。这些变量稍后将通过涉及积分或留数的计算去除 如何开发这些未知数量的变量?也许是索引的?我在互联网上看到的所有例子都是使用一个已知的、具有一定大小的物体,例如,或中的“物品” 我想我可以把它归结为一个简单的例子,用在我的真实脚本中: import sympy as s p0,p1,p2,p3,p4=s.symbols('p0 p1 p2 p3 p4') l = [p0, p1, p2, p3, p4] de

我有一个递归函数,它可以产生一个难以知道的表达式数量,每个表达式都需要一个新的变量乘以它。这些变量稍后将通过涉及积分或留数的计算去除

如何开发这些未知数量的变量?也许是索引的?我在互联网上看到的所有例子都是使用一个已知的、具有一定大小的物体,例如,或中的“物品”

我想我可以把它归结为一个简单的例子,用在我的真实脚本中:

import sympy as s
p0,p1,p2,p3,p4=s.symbols('p0 p1 p2 p3 p4')
l = [p0, p1, p2, p3, p4]

def f(n):
    if n == 0:
        return l[n]
    elif n == 1: 
        return l[n]
    else:
        return f(n-1)*l[n]+f(n-2)

f(3) # works
f(6) # doesnt' work - need to define ahead of time the 
     # dummy variables l[6], l[5], .... 
     # even if they are just symbols for (much) later numerical evaluation.
我需要上面这段代码来提前实际生成所需的未知数

我看到有人提到熊猫,但找不到一个好的例子来说明我的需要,甚至不确定这是不是最好的路线。还看到了诸如“…未知数量的行[文件]…”或“…未知数量的参数…”之类的内容,但这些内容似乎不适用。

表示一个抽象事物,索引采用任何值,并且不限制索引的大小

import sympy as s
p = s.IndexedBase("p")

def f(n):
    if n == 0 or n == 1:
        return p[n]
    else:
        return f(n-1)*p[n] + f(n-2)

print(f(7))
输出

(p[0] + p[1]*p[2])*p[3] + (((p[0] + p[1]*p[2])*p[3] + p[1])*p[4] + p[0] + p[1]*p[2])*p[5] + (((p[0] + p[1]*p[2])*p[3] + p[1])*p[4] + ((p[0] + p[1]*p[2])*p[3] + (((p[0] + p[1]*p[2])*p[3] + p[1])*p[4] + p[0] + p[1]*p[2])*p[5] + p[1])*p[6] + p[0] + p[1]*p[2])*p[7] + p[1]

另外,像
p0,p1,p2,p3,p4=s.symbols('p0p1-p2-p3-p4')
这样的事情可以更容易地用
syms=s.symbols('p0:5')
甚至更容易地完成

n = ...
syms = s.symbols('p0:{}'.format(n))

这将创建单个符号,而不是索引对象,因此在创建时必须知道数字n。但仍然比清单P0P1等更容易。

虽然我对python非常陌生,但我认为两者都需要知道大小。。。我需要Maxima中的关键字gensym():
list=[1,2,3],list.append(4)
-这就是您想要实现的吗?在上面的代码段中,如果我只调用
f(6)
,我希望所需的
l[6]
隐式可用,方法是提供一个伪变量,因此,计算可以继续…如果f(6)不存在,您可以创建一个helper函数来返回一个伪值吗?因此,如果我调用
f(6)
,它将要求
l[6]
存在。我可以创建一个包含1000个索引符号的列表(不知怎么的,我不知道),或者使用生成器或dict,我想这样内存就不会被占用,但也许我不知道怎么做。调用
f(6)
将需要
l[6]
,然后调用
f(5)
f(4)
,这将需要
l[5]
l[4]
等。因此,也许你的想法可行,但我还不能确定。完美!谢谢仍在阅读您提供的链接,但我注意到我可以使用这些对象,即
f(7).subs(p[4],0)