我的问题是关于Python 3中的列表。在下面的代码中,我给出了一个类的方法,其目的是模仿多项式的数学行为。该类将包含多项式算术的方法以及一个属性。此属性是多项式中系数的列表,元素按多项式的正态顺序列出。例如,7x^3+3x+4 变为 [7,0,3,4]
下面的 add(( 方法试图模仿视觉上右对齐的加法,就像在普通算术中一样。它首先找到哪个列表更短,然后将其元素添加到较长列表中的相应元素,然后返回具有此更改的较长列表。但是,我不希望实际更改任何一个原始列表的副作用,因此我将原始列表分配给方法内部列表。当我创建两个多项式 p = P([1,2,3]( 和 q = P([1,2,3](,然后调用 p.add(q( 时,会发生加法,但没有任何东西打印到屏幕上,当我检查 p.coeffs 时,它显示为 [2,4,6]。
class P:
coeffs = []
def __init__(self,coeffs):
self.coeffs = coeffs
def add(self,q):
if len(self.coeffs) >= len(q.coeffs):
greater = self.coeffs
lesser = q.coeffs
else:
greater = q.coeffs
lesser = self.coeffs
i = -1
while i >= -len(lesser):
greater[i] = greater[i]+lesser[i]
i=i-1
return greater
感谢您提供的任何帮助。
greater = self.coeffs
不会复制self.coeffs
。 greater
和self.coeffs
现在指向同一个列表对象。
如果要克隆列表,请对其进行切片:
greater = self.coeffs[:]
或者通过内置的list
传递它:
greater = list(self.coeffs)
此外,您应该重写__add__
而不是创建自己的方法,因为这可以让您实际使用加法运算符添加两个对象。
如果您"向后"表示多项式,您可能还会发现将它们相加更容易(例如 2x^2 + 1
变得[1, 0, 2]
(