如何以pythonic方式对对象列表的参数求和?

如何以pythonic方式对对象列表的参数求和?,python,object,numpy,Python,Object,Numpy,当我使用numpy时,我可以简单地写下两个1D数组的和: C = A + B 如果我有一个对象列表,列表中的所有对象都属于同一个类,并且都有三个参数(r、v和a)。如果我想计算列表中所有对象的r=r+v+0.5*a: 如果我知道我所有的对象都在一个列表L中,我如何像在numpy中那样把它写在一行中 我想是这样吧 L.r += L.v + 0.5*L.a 如果你能用两条线存活下来,试试这个: for item in L: item.r += item.v + 0.5 *

当我使用numpy时,我可以简单地写下两个1D数组的和:

    C = A + B
如果我有一个对象列表,列表中的所有对象都属于同一个类,并且都有三个参数(r、v和a)。如果我想计算列表中所有对象的
r=r+v+0.5*a
: 如果我知道我所有的对象都在一个列表L中,我如何像在numpy中那样把它写在一行中

我想是这样吧

    L.r += L.v + 0.5*L.a

如果你能用两条线存活下来,试试这个:

for item in L:
    item.r += item.v + 0.5 * item.a

如果你能用两条线存活下来,试试这个:

for item in L:
    item.r += item.v + 0.5 * item.a

如果你不能靠两条线生存:

[setattr(item,'r',item.r + item.v + 0.5 * item.a) for item in L]

如果你不能靠两条线生存:

[setattr(item,'r',item.r + item.v + 0.5 * item.a) for item in L]

有点不清楚您想要的输出是什么。您是否正在查找数字列表:

[x.r + x.v + .5*x.a for x in L]
这些的总和是多少

sum([x.r + x.v + .5*x.a for x in L])
还是改变对象本身

runningSum=0
def mod(obj):
    # How complicated this function is depends on what your trying to accomplish.  
    obj.r = runningSum + obj.r + obj.v + .5*obj.a
    runningSum = obj.r
    return obj

map(mod,L)

有点不清楚您想要的输出是什么。您是否正在查找数字列表:

[x.r + x.v + .5*x.a for x in L]
这些的总和是多少

sum([x.r + x.v + .5*x.a for x in L])
还是改变对象本身

runningSum=0
def mod(obj):
    # How complicated this function is depends on what your trying to accomplish.  
    obj.r = runningSum + obj.r + obj.v + .5*obj.a
    runningSum = obj.r
    return obj

map(mod,L)

虽然不是一个正式的答案,但我想唤起你们的好奇心,让你们想象一个由你们的问题引发的充满可能性的世界。如果出于某种原因不想使用numpy,并且只想知道如何在一行中求列表中所有元素的和,那么可能需要重新定义列表之间的操作。这可以通过定义一个非常简单的类来实现,如下所示:

class array():
    def __init__(self, mylist):
        self.list = mylist
        return
    def __add__(self, other):
        for i in xrange(len(self.list)):
            self.list[i] += other.list[i]
        return array(self.list)
    def __repr__(self):
        return "%s" % (self.list)
您可以看到,该类是使用python列表实例化的,然后我定义了
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
方法,它本质上。当然,这里有足够的空间来改进它并检查异常,但这只是为了强调一个事实,即您可以定义任何您想要的。您可以看到,添加两个数组对象将返回一个新的数组对象,这允许我们继续添加

为了让您了解它是如何工作的,下面我写了一个非常简单的示例:

A = array([1,2,3,4,5])
B = array([3,2,4,5,6])
C = A+B
然后,如果在提示符中键入C,您将看到

[4, 4, 7, 9, 11]

这也是一个数组类

虽然不是一个正式的回答,但我想唤起你的好奇心,让你想象一个由你的问题引发的充满可能性的世界。如果出于某种原因不想使用numpy,并且只想知道如何在一行中求列表中所有元素的和,那么可能需要重新定义列表之间的操作。这可以通过定义一个非常简单的类来实现,如下所示:

class array():
    def __init__(self, mylist):
        self.list = mylist
        return
    def __add__(self, other):
        for i in xrange(len(self.list)):
            self.list[i] += other.list[i]
        return array(self.list)
    def __repr__(self):
        return "%s" % (self.list)
您可以看到,该类是使用python列表实例化的,然后我定义了
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
方法,它本质上。当然,这里有足够的空间来改进它并检查异常,但这只是为了强调一个事实,即您可以定义任何您想要的。您可以看到,添加两个数组对象将返回一个新的数组对象,这允许我们继续添加

为了让您了解它是如何工作的,下面我写了一个非常简单的示例:

A = array([1,2,3,4,5])
B = array([3,2,4,5,6])
C = A+B
然后,如果在提示符中键入C,您将看到

[4, 4, 7, 9, 11]

这也是一个数组类

这(矢量化)是在做arthmetic时使用numpy而不是列表的主要原因之一。据我所知,在本机python中,如果不调用for循环或列表理解,就无法做到这一点。出于好奇,您为什么希望在numpy之外进行此类操作?如果我在对象列表上使用numpy.asarray,我是否能够直接对numpy.array上对象的参数进行矢量化?它告诉我AttributeError:'numpy.ndarray'对象没有属性'r'@Phaune您需要做的是创建3个numpy数组,每个属性一个,执行向量化操作(效率更高),然后在原始对象列表中设置值。这(向量化)这是在做arthmetic时使用numpy而不是列表的主要原因之一。据我所知,在本机python中,如果不调用for循环或列表理解,就无法做到这一点。出于好奇,您为什么希望在numpy之外进行此类操作?如果我在对象列表上使用numpy.asarray,我是否能够直接对numpy.array上对象的参数进行矢量化?它告诉我AttributeError:'numpy.ndarray'对象没有属性'r'@Phaune您需要做的是创建3个numpy数组,每个属性一个,然后执行向量化操作(这将更加高效)然后在原来的对象列表中设置这些值,但是在做这个之前我真的会考虑亚当@休斯的评论。但是我真的会考虑亚当@休斯的评论。提问者只是想复制一个numpy功能。我认为这个问题并没有说明任何关于所需输出的内容,提问者只是想复制一个numpy功能。