我正在使用一个多项式程序,它接受像这样的输入(系数,指数)
P1 =多项式((9,11),(6,14),( - 12,3),(42,0))
这是我的构造函数:
def __init__(self, *termpairs):
L = [x for x in termpairs]
L = sorted(L, key=lambda x: x[1], reverse=True)
self.coeffs = L
所以我的问题是如何在已经制作的对象中添加另一个术语?这个新术语就像这个P1.addterm(系数,指数)一样添加,并且到目前为止我所拥有的并且它不起作用:
def addterm(self, *newterm):
for i in range(len(self.coeffs)):
if self.coeffs[i][1] == newterm[1]:
#code for when exponent is already in polynomial
break
else:
self.coeffs = Polynomial(self.coeffs), newterm)
break
答案 0 :(得分:2)
看起来您的所有字词都只是列表self.coeffs
中的元组元素。在这种情况下......
def addterm(self, newcoeff, newexp):
newterm = (newcoeff, newexp)
self.coeffs.append(newterm)
self.coeffs.sort(key=lambda x: x[1], reverse=True)
# operator.itemgetter is probably better here.
# # self.coeffs.sort(key=operator.itemgetter(1), reverse=True)
答案 1 :(得分:2)
self.coeffs
是一个列表,所以只需附加到它的末尾并重新排序列表:
self.coeffs.append(newterm)
self.coeffs.sort(key=lambda p: p[1])
请注意,如果您确实要传入单个元组,则函数签名是错误的。删除*
,它将按预期工作。
如果您更换数据的顺序并存储(exponent, coefficient)
而不是(coefficient, exponent)
,您还可以使用bisect
模块来避免排序:
import bisect
...
bisect.insort(self.coeffs, newterm)