向对象添加新元素

时间:2017-04-24 05:11:08

标签: python

我正在使用一个多项式程序,它接受像这样的输入(系数,指数)

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

2 个答案:

答案 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)