Python: 字符串格式化和枚举? (以 pythonic 方式生成多项式的良好字符串表示形式)

Python: String formatting together with enumerate? (Producing a nice string representation of a polynomial in a pythonic way)

我开始写一点 class 应该用一个变量表示多项式函数。我知道那里有强大的 sympy 模块,但我认为放置几行代码比加载整个 sympy 模块更简单。主要原因是只是使用了我不需要的抽象级别(即处理变量和环)。

这就是我所做的:

class Polynomial:
    """Class representing polynomials."""
    
    def __init__(self, *coefficients):
        self.coefficients = list(coefficients)
        """Coefficients of the polynomial in the order a_0,...a_n."""
     
    def __repr__(self):
        return "Polynomial(%r)" % self.coefficients
            
    def __call__(self, x):    
        res = 0
        for index, coeff in enumerate(self.coefficients):
            res += coeff * x** index
        return res

我也想实现 __str___ 与 for 循环产生的相同输出:

res = ""
for index, coeff in enumerate(self.coefficients):
    res += str(coeff) + "x^"+str(index)

首先,我希望像 "$r*x^%r" % enumerate(self.coefficients) 这样的东西可以工作,但它没有。我尝试将 enumerate(...) 转换为元组,但这也没有解决问题。

有什么关于我可以用于 __str__ 的 pythonic 单行 return 语句的想法吗?

我不确定我是否正确理解了你的问题,但你可以使用 str.formatstr.join 来获取你的字符串。例如:

coefficients = [2, 5, 1, 8]
print( '+'.join('{1}*x^{0}'.format(*v) for v in enumerate(coefficients)) )

打印:

2*x^0+5*x^1+1*x^2+8*x^3