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

Can I manually redefine addition and multiplication for Python lists?

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

我知道这可以通过 numpy.array 或自定义对象实现,但对于小型实验程序,这会使我的代码和输出变得混乱且难以阅读。

比如我希望能够写成:

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

并让 w 成为列表 [8,3]。这在 Python 中可能吗?

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

print(w)

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

您可以定义一个函数,例如:

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]

如果你想定义你自己的数据类型并定义它自己的运算符,你可以使用一个叫做operator overloading的东西。下面是一个例子:

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]