相关疑难解决方法(0)

python的sum()和非整数值

是否有一种简单快捷的方法将sum()与非整数值一起使用?

所以我可以像这样使用它:

class Foo(object):
    def __init__(self,bar)
        self.bar=bar

mylist=[Foo(3),Foo(34),Foo(63),200]
result=sum(mylist) # result should be 300
Run Code Online (Sandbox Code Playgroud)

我试着重写__add____int__等,但我没有找到一个解决办法

编辑:

解决方案是实现:

 def __radd__(self, other):
    return other + self.bar
Run Code Online (Sandbox Code Playgroud)

正如威尔在他的帖子中所说.但一如既往,所有道路都通往罗马,但我认为这是最好的解决方案,因为我不需要__add__在课堂上

python sum list

25
推荐指数
5
解决办法
2万
查看次数

避免Python和默认启动arg行为

我正在使用实现__add__但不是子类的Python对象int.MyObj1 + MyObj2工作正常,但sum([MyObj1, MyObj2])导致了TypeError,因为sum()第一次尝试0 + MyObj.为了使用sum(),我的对象需要__radd__处理MyObj + 0 或者我需要提供一个空对象作为start参数.有问题的对象不是空的.

在有人要求之前,该对象不像列表或类似字符串,因此使用join()或itertools无济于事.

编辑以获取详细信息:模块具有SimpleLocation和CompoundLocation.我将把位置缩写为Loc.A SimpleLoc包含一个右开间隔,即[开始,结束].添加SimpleLoc产量a CompoundLoc,其中包含间隔列表,例如[[3, 6), [10, 13)].最终用途包括遍历联合,例如[3, 4, 5, 10, 11, 12],检查长度和检查成员资格.

数字可以相对较大(例如,小于2 ^ 32但通常为2 ^ 20).间隔可能不会非常长(100-2000,但可能更长).目前,仅存储端点.我现在暂时想到尝试子类化set,使得该位置被构造为set(xrange(start, end)).但是,添加集将使Python(和数学家)适合.

我看过的问题:

我正在考虑两种解决方案.一种是避免sum()和使用本评论中提供的循环.我不明白为什么sum()开始将iterable的第0项添加到0而不是添加第0和第1项(如链接注释中的循环); 我希望有一个神秘的整数优化原因.

我的另一个解决方案如下; 虽然我不喜欢硬编码的零检查,但这是我能够sum()工作的唯一方式.

# ... …
Run Code Online (Sandbox Code Playgroud)

python sum

14
推荐指数
1
解决办法
1206
查看次数

求和类实例

我正在尝试在sum()对象列表上使用内置函数并作为结果获取对象.

这是我的代码的摘录:

class vector:

    def __init__(self, x, y):
        self.x = x
        self.y = y

    def __add__(self, other):
        return vector(self.x+other.x, self.y+other.y)

l = []
l.append(vector(3, 5))
l.append(vector(-2, 3))
l.append(vector(0,-4))

net_force = sum(l)
Run Code Online (Sandbox Code Playgroud)

我收到错误:

TypeError: unsupported operand type(s) for +: 'int' and 'instance'
Run Code Online (Sandbox Code Playgroud)

我想这是因为sum()最初将结果设置为0然后遍历列表,但我只能定义添加内容vector,而不是相反.

python sum object

4
推荐指数
1
解决办法
276
查看次数

在python类上定义算术运算

我试图找出是否有可能在python类上定义算术运算。我想做些什么:

class a():
    @classmethod
    def __add__(cls, other):
        pass

a + a
Run Code Online (Sandbox Code Playgroud)

但是,我当然知道:

TypeError: unsupported operand type(s) for +: 'type' and 'type'

这样的事情有可能吗?

python python-3.x

2
推荐指数
1
解决办法
81
查看次数

标签 统计

python ×4

sum ×3

list ×1

object ×1

python-3.x ×1