Python 将多项式转换为列表类型
我正在尝试转换多项式 比如说Python 将多项式转换为列表类型,python,list,numpy,Python,List,Numpy,我正在尝试转换多项式 比如说 2x^2 然后把它变成一个列表 [2,0,0] 可用于numpy poly1d函数的位置 这是我目前的代码 def convert_poly_to_list_type(poly): # sort list and split poly = sorted(str(poly).split()) poly1 = [] for i in poly: if i == "+": pa
2x^2
然后把它变成一个列表
[2,0,0]
可用于numpy poly1d函数的位置
这是我目前的代码
def convert_poly_to_list_type(poly):
# sort list and split
poly = sorted(str(poly).split())
poly1 = []
for i in poly:
if i == "+":
pass
else:
poly1.append(i)
# take out "+"
exponents = []
for i in poly1:
x = i.split("^")
if len(x) == 1:
exponents.append(0)
else:
print(x)
exponents.append(int(x[1]))
# find largest exponent
integers_in_list = int(max(exponents)) + 1
numpy_list = [0] * integers_in_list
# create a list
for i in poly1:
i = i.split("^")
if len(i) == 1:
numpy_list[len(numpy_list) - 1] += int(i[0])
else:
z = i[0]
z = int(z[:len(z) - 1])
y = int(i[1])
numpy_list[len(numpy_list) - 1 - y] += z
return numpy_list
但它得到了一个错误:
z = int(z[:len(z) - 1])
ValueError: invalid literal for int() with base 10: ''
有人能给我一些代码来解决这个问题吗?我已经搜索了2个小时,还没有找到一个解决方案一个人几乎可以得到
sympy
来完成所有的工作,包括对类似的术语进行分组。令人烦恼的是,我们需要进行一些字符串操作,才能从“2x^2”
到“2*x^2”
。也许有更好的办法
from sympy import sympify, Poly, var
import re
s = "2x^2 + 7x^2 + 11x - 20"
# see here: https://stackoverflow.com/questions/2763750/how-to-replace-only-part-of-the-match-with-python-re-sub
s2 = re.sub(r"(\d)([a-z])", r"\1*\2", s)
# define a variable x
x = var("x")
# construct a sympy polynomial from string
# WARNING: this may call eval
expr = Poly(sympify(s2), x)
# get the coefficients
coefs = expr.coeffs()
print(coefs)
# [9, 11, -20]
这会产生错误:
In [31]: int('')
Traceback (most recent call last):
File "<ipython-input-31-e4f84bb32d50>", line 1, in <module>
int('')
ValueError: invalid literal for int() with base 10: ''
必须生成空字符串'
。然后,z
必须是“”或“1”(一个字符)
这样的代码在跟踪问题时需要一些调试
打印语句。这并不神秘;你只要小心,注意细节就行了 嘿,格式是否始终完全匹配nx^k
?询问,因为你可以简化你的函数。不,它也可以是nx^k+nx^k-n@zeromika你能提供准确的预期格式吗?当我打印出z时,它是一个整数,而不是一个空字符串。你能帮我调试一下吗?我还没有找到一个修复它的工作非常感谢你!
z[:len(z) - 1]