我必须在3d矢量上执行添加。变量向量是一个列表

时间:2018-06-07 09:47:39

标签: python python-3.x function class vector

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的类。 非常感谢提前

1 个答案:

答案 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*55*v,其中vVector个对象。

>>> 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