我可以为 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]
我正在 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]