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]