小编rtr*_*ker的帖子

如何在表示9000+个字符的数学表达式的字符串中放置适当的换行符?

我有很多长字符串(每个字符9000多个字符)代表数学表达式.我最初使用sympy生成表达式,这是一个python符号代数包.一个截断的例子是:

a = 'm[i]**2*(zb[layer]*m[i]**4 - 2*zb[layer]*m[j]**2*m[i]**2 + zb[layer]*m[j]**4 - zt[layer]*m[i]**4 + 2*zt[layer]*m[j]**2*m[i]**2 - zt[layer]*m[j]**4)**(-1)*ab[layer]*sin(m[i]*zb[layer])*sin(m[j]*zb[layer])'
Run Code Online (Sandbox Code Playgroud)

我最终复制字符串中的文本,然后使用is作为代码(即在'和'之间复制文本,然后将其粘贴到函数中作为代码):

def foo(args):
    return m[i]**2*(zb[layer]*m[i]**4 - 2*zb[layer]*m[j]**2*m[i]**2 + zb[layer]*m[j]**4 - zt[layer]*m[i]**4 + 2*zt[layer]*m[j]**2*m[i]**2 - zt[layer]*m[j]**4)**(-1)*ab[layer]*sin(m[i]*zb[layer])*sin(m[j]*zb[layer])
Run Code Online (Sandbox Code Playgroud)

长行代码变得笨拙并且使我的IDE(Spyder)变慢,所以我想放入一些换行符(代码可以正常工作一条长行).我已成功完成此操作,方法是将表达式括在括号中并自行放入换行符(即根据PEP8使用隐式行连接):

def foo(args):
    return (m[i]**2*(zb[layer]*m[i]**4 - 2*zb[layer]*m[j]**2*m[i]**2 + 
        zb[layer]*m[j]**4 - zt[layer]*m[i]**4 + 2*zt[layer]*m[j]**2*m[i]**2 - 
        zt[layer]*m[j]**4)**(-1)*ab[layer]*sin(m[i]*zb[layer])*sin(m[j]*zb[layer]))
Run Code Online (Sandbox Code Playgroud)

我想要一些功能或功能,将为我提供换行.我已经尝试过使用该textwrap模块但是将该行拆分为不合适的地方.例如,在下面的代码中,最后一行在"layer"的中间分割,这使我的数学表达式无效:

>>> import textwrap
>>> a = 'm[i]**2*(zb[layer]*m[i]**4 - 2*zb[layer]*m[j]**2*m[i]**2 + zb[layer]*m[j]**4 - zt[layer]*m[i]**4 + 2*zt[layer]*m[j]**2*m[i]**2 - zt[layer]*m[j]**4)**(-1)*ab[layer]*sin(m[i]*zb[layer])*sin(m[j]*zb[layer])'
>>> print(textwrap.fill(a,width=70))
m[i]**2*(zb[layer]*m[i]**4 - 2*zb[layer]*m[j]**2*m[i]**2 +
zb[layer]*m[j]**4 - zt[layer]*m[i]**4 + 2*zt[layer]*m[j]**2*m[i]**2 - …
Run Code Online (Sandbox Code Playgroud)

python string sympy

5
推荐指数
1
解决办法
733
查看次数

标签 统计

python ×1

string ×1

sympy ×1