向对象添加新元素

2024-09-28 21:53:38 发布

您现在位置: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

Tags: inself程序forinitdef指数sorted
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)

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)

相关问题 更多 >