Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python __添加列表的所有元素_Python - Fatal编程技术网

Python __添加列表的所有元素

Python __添加列表的所有元素,python,Python,我想合并定义了\uuuuu add\uuuu方法的类的类实例列表 i、 例如,我有一个类实例的列表L=[a,B,C,D],我想要它们的和e=a+B+C+D,但是要将它们概括,这样我就可以做类似e=sum(L)的事情,而不是+语法 我应该使用什么函数来执行此操作?\uuuuuuuuuuuuuuuuuuuuuuuuu方法是否足够,或者我是否需要定义不同的类方法(例如\uuuuuuidd\uuuuuuuuuuuuuuuuuuu)来实现这一点 (如果结果是重复的,我该怎么问这个问题?忽略我之前的答案,它

我想合并定义了
\uuuuu add\uuuu
方法的类的类实例列表

i、 例如,我有一个类实例的列表
L=[a,B,C,D]
,我想要它们的和
e=a+B+C+D
,但是要将它们概括,这样我就可以做类似
e=sum(L)
的事情,而不是
+
语法

我应该使用什么函数来执行此操作?
\uuuuuuuuuuuuuuuuuuuuuuuuu
方法是否足够,或者我是否需要定义不同的类方法(例如
\uuuuuuidd\uuuuuuuuuuuuuuuuuuu
)来实现这一点


(如果结果是重复的,我该怎么问这个问题?

忽略我之前的答案,它是错误的

reduce
函数允许您将任何二进制函数或方法应用于序列的所有元素。所以,你可以写:

reduce(YourClass.__add__, sequence)
如果序列中并非所有对象都是同一类的实例,请改用以下方法:

import operator
reduce(operator.add, sequence)
或者这个:

reduce(lambda x, y: x + y, sequence)

sum
可能需要将数值添加到类的实例中。例如,定义
int
+
Foo(1)
将被定义为:

class Foo(object):
    def __init__(self, val):
        self.val = val
    def __add__(self, other):
        return self.val + other.val
    def __radd__(self, other):
        return other + self.val

A = Foo(1)
B = Foo(2)
L = [A,B]
print(A+B)
# 3

print(sum(L))
# 3

@AdamMihalcin
\uuuu iadd\uuuu
是标准运算符方法之一。@Taymon我的错误。我已删除了令人不快的评论。将来您可能希望编辑您的答案,而不是将其删除并创建一个新答案。通常我会这样做,但由于旧答案100%错误,我认为我应该删除它。您可以100%更改它,然后:)嘎,点击删除。[当它询问我是否确定时,甚至点击了“是”。]虽然sum(L)不起作用,sum(L,the_zero)将--
\uuu add\uu
被调用,它只是从默认值开始,即0。请注意,在最新版本中,
sum
不允许字符串(在start元素中),所有归结为反复调用
+
的解决方案对于列表、元组等也是无效的——对于串联字符串,
str.join
是积极推荐的+1但unutbu更直接地回答了这个问题(
\uuuuu radd\uuuuu
需要定义
求和
才能起作用)。
class Foo(object):
    def __init__(self, val):
        self.val = val
    def __add__(self, other):
        return self.val + other.val
    def __radd__(self, other):
        return other + self.val

A = Foo(1)
B = Foo(2)
L = [A,B]
print(A+B)
# 3

print(sum(L))
# 3