如何将字符串列表转换为sympy变量?

4

我有一个字符串列表,例如var = ['x', 'y', 'z']。我想将这些字符串用作sympy的“符号”。我正在尝试做到这一点:

for i in var:
    i = symbols('i')

当然,它并没有起作用。有人可以帮我解决这个问题吗?
2个回答

3
几个问题:
  1. 调用 sympy.symbols 时,输入字符串不会被改变。
  2. 你需要使用 var 中的每个元素作为参数来调用 symbols,你硬编码了一个带有字符串参数 'i' 的调用。
  3. 循环体内对 i 的赋值毫无意义,因为在下一次迭代中,名称 i 将被重新分配给 var 中的下一个元素(你甚至没有使用它)。
所以总之,你需要使用 var 中的每个元素来调用 symbols 并将返回值存储在某个地方。
>>> import sympy
>>> var_as_strings = ['x', 'y', 'z']
>>> var_as_symbol_objects = [sympy.symbols(v) for v  in var_as_strings]
>>> var_as_symbol_objects
[x, y, z]
>>> type(var_as_symbol_objects[0])
<class 'sympy.core.symbol.Symbol'>

(我使用了过于冗长的变量名来使示例自我记录。)

如果我使用“from sympy import *”并写“symbols(v)”而不是“sympy.symbols(v)”,它也应该可以工作,对吧?@timgeb - Push
@PushanSharma 是的 - timgeb

2
你所做的事情没有起作用的原因是你试图将符号分配给一个无法更改的字符串(例如,'a'=1也会因为同样的原因而失败)。
如果你正在交互式地工作,并且想要与符号相同名称的变量,可以这样写:
>>> var(','.join(variables)) # variables = ['x', 'y', 'z']
(x, y, z)

顺便提一下,有时候您会将表达式转换为符号表达式,并希望能够交互式地访问变量。您也可以使用var来实现这一点:

>>> eq = S('x + y')
>>> var(','.join([s.name for s in eq.atoms(Symbol)]))
(x, y)
>>> eq.diff(x)
1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接