繁体   English   中英

我可以手动重新定义 Python 列表的加法和乘法吗?

[英]Can I manually redefine addition and multiplication for Python lists?

我正在为 Python 中的小型实验和原型使用向量。 我想为 Python 列表和数字重新定义像 + * - / 这样的二元运算符,以表示向量加法、内积等。

我知道这可以通过 numpy.array 或自定义 object 实现,但是对于一个小型实验程序,这会使我的代码和 output 混乱且难以阅读。

例如,我希望能够编写:

u=[1,3]
v=[2,-1]
w=2*u+3*v

并让 w 成为列表 [8,3]。 这在 Python 中是否可行?

您可以定义一个 function,如下所示:

def my_add(u, v):
    u = [2*i for i in u]
    v = [3*i for i in v]
    add = [u[i] = v[i] for i in range(2)]
    return add

u = [1, 3]
v = [2, -1]
print(my_add(u, v)) # returns [8,3]

如果要定义自己的数据类型并定义自己的运算符,可以使用称为 运算符重载的东西。 下面是一个例子:

class Vector:
    def __init__(self, array):
        self.array = array

    def __add__(self, o):
        self.array = [2*i for i in self.array]
        o.array = [3*i for i in o.array]
        return [self.array[i] + o.array[i] for i in range(2)]

u = Vector([1, 3])
v = Vector([2, -1])
print(u+v) # returns [8,3]
u=[1,3]
v=[2,-1]
w = []
for i in range(2):
    w.append(2*u[i] + 3*v[i])

print(w)

你必须这样做,你可以根据你的向量的大小来改变range()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM