class Vector:
def __init__(self, vector):
self.vector = vector
def __eq__(self, other):
return self.vector==other.vector
#above must not be changed. Below is my work.
#def __str__(self):
# return self.vector ---Not sure how to use __str__ on a list---
def __add__(self,other):
vector = Vector(self.vector+other.vector)
return vector
我知道这是一个错误的方法,但我不知道如何使用列表。我只是想知道如何使用类中的列表。 此外,以下声明应该有效:
x=Vector([2,4,6]) #This is a list right? This is where I get stuck.
y=Vector([7,8,9])
print(x+y==Vector([9.12.15]))
我不希望只有添加的所有操作的答案就足够了。我只是不明白如何在没有语句“a.vector”的情况下在类中输出列表,在使用类创建对象时,这些语句显然没有使用上面给出的命令。
另请注明是否需要澄清。 任何帮助表示赞赏! 我是编程新手,刚学过Python的类。 非常感谢提前
答案 0 :(得分:1)
添加两个长度为3的向量的结果应该是一个包含3个元素的向量,其中每个元素是原始两个向量中相应元素的总和。
def __add__(self,other):
return Vector([a+b for a,b in zip(self.vector, other.vector)])
这使用zip
一起迭代两个起始向量,并使用list comprehension构建新列表。
>>> x = Vector([2,4,6])
>>> y = Vector([7,8,9])
>>> x+y==Vector([9,12,15])
True
更多:
如果你想支持标量乘法,如你的评论所示,那么你的other
操作数不是另一个向量,而是一个数字。因此,您需要将每个元素分别乘以该数字。
def __mul__(self, other):
return Vector([a*other for a in self.vector])
__rmul__ = __mul__
这应该允许您同时执行v*5
和5*v
,其中v
是Vector
个对象。
>>> x = Vector([2,4,6])
>>> x*5==Vector([10,20,30])
True
更多的
以下是如何在两个向量之间编写点积的示例:
def dot(self, other):
return sum(a*b for (a,b) in zip(self.vector, other.vector))
>>> x = Vector([1,2,3])
>>> y = Vector([3,2,1])
>>> x.dot(y)
10