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

时间:2017-12-25 22:44:51

标签: python sympy

我有一个字符串列表,例如var = ['x', 'y', 'z']。我想将这些字符串用作同情“符号”。我想这样做:

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

它当然不起作用。有人可以帮我这个吗?

2 个答案:

答案 0 :(得分:3)

几个问题:

  1. 调用sympy.symbols时,输入字符串永远不会发生变异。
  2. 您需要使用symbols的每个元素作为参数调用var,并使用字符串参数'i'对调用进行硬编码。
  3. 在循环体内对i的赋值是没有意义的,因为在下一次迭代中,名称i将被重新分配给var中的下一个元素(您不会这样做)甚至使用)。
  4. 总而言之,您需要使用symbols的每个元素调用var并将返回值存储在某处。

    >>> 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'>
    

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

答案 1 :(得分:1)

你所做的不起作用的原因是因为你试图将一个符号分配给一个不能改变的字符串(例如&#39; a&#39; = 1会因同样的原因而失败)。

如果您正在以交互方式工作,并且想要与您可以编写的符号同名的变量

>>> var(','.join(variables)) # variables = ['x', 'y', 'z']
(x, y, z)