You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复n维向量类vect传入列表参数时的运算错误?

修复n维向量类的参数兼容问题

问题根源

原vect类的构造函数和plus/minus方法依赖可变参数*a实现多数字输入,但当传入列表/元组时,参数会被包裹成单元素元组(例如vect([1,2,3])会让self.a = ([1,2,3],))。此时调用plus([3,2,1]),zip(self.a, plus)会直接拼接两个列表,导致错误的[[1,2,3,3,2,1]]结果。

修复方案

利用提供的convert函数,在构造函数和运算方法中增加参数判断,自动将单个可迭代对象(列表/元组)展开为数字元组,同时保留多数字参数的兼容能力:

def convert(lst):
    return (*lst, )

class vect:
    def __init__(self, *a):
        # 处理单个可迭代对象输入(排除字符串/字节串)
        if len(a) == 1 and hasattr(a[0], '__iter__') and not isinstance(a[0], (str, bytes)):
            self.a = convert(a[0])
        else:
            self.a = a
    def plus(self, *plus):
        # 统一处理plus参数格式
        if len(plus) == 1 and hasattr(plus[0], '__iter__') and not isinstance(plus[0], (str, bytes)):
            plus = convert(plus[0])
        res_plus = [vi + wi for vi, wi in zip(self.a, plus)]
        return res_plus
    def minus(self, *minus):
        # 统一处理minus参数格式
        if len(minus) == 1 and hasattr(minus[0], '__iter__') and not isinstance(minus[0], (str, bytes)):
            minus = convert(minus[0])
        res_minus = [vi - wi for vi, wi in zip(self.a, minus)]
        return res_minus
    def multiply(self, mult):
        res_multiply = [mult * vi for vi in self.a]
        return res_multiply

验证测试

测试1:多数字参数输入

x = vect(1,2,3)
print('plus:', x.plus(3,2,1))
# 输出:plus: [4, 4, 4]

测试2:列表参数输入

x = vect([1,2,3])
print('plus:', x.plus([3,2,1]))
# 输出:plus: [4, 4, 4]

核心逻辑

通过判断输入是否为单个可迭代对象(非字符串/字节串),调用convert将其展开为元组,确保self.a和运算参数始终是数字组成的元组,从而让向量加法、减法逻辑能正确遍历每个元素计算。

内容的提问来源于stack exchange,提问作者Stephen Brown

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 09:01:14