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.format
和 str.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
我开始写一点 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.format
和 str.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